It's a bad idea because:
1) It's impossible, since Bitcoin don't have "balances", only transactions. An address balance is simply a derived figure calculated by adding up all the transactions going into it and subtracting the transactions going out; this figure is not actually "stored" in the blockchain anwhere. More importantly, because a transaction input must be the output of a previous transaction, knowing an address balance is useless if you don't know exactly which transactions the money came from.
2) The idea of stealing money that hasn't been moved in a while is
not going be accepted by users. This is one of the key reasons why I'm using Bitcoin in the first place: my bank actually froze one of my accounts once because I "hadn't used it in a while"
without even telling me, causing major frustration the day I actually
did try to use it.
But at least they held on to my money and (eventually) gave it back to me instead of
stealing it outright. If anything even remotely like this is ever implemented in Bitcoin (not that that's likely to happen), then I (and probably most other users) will take my money elsewhere.
3) Finally, and most importantly, we already have something like this: Merkle tree pruning, which involves removing transactions that have totally spent outputs. All we need is a client that actually implements this. There's no need to make any changes to the protocol.