The only reason this problem exists is because of the artificial limits placed on the system to work around its scalability limitations. The solution is not to try and suppress usage of BitCoin, even if you suspect that usage is pointless or malicious. The solution is to make a few thousand transactions per minute not a problem for anyone to process.
Today that means finishing off the client mode work in the main client, or, having most users move to an alternative implementation that is client mode only (like BitCoinJ). It'd be better to do the first one but nobody seems to be working on it right now.
I'm not talking about small transactions, but free transactions of any size. Anything that is free will be completely used. If free transactions could fill blocks to 100 GB, I have no doubt that many blocks would be 100 GB. Even when Bitcoin has a client mode, the network will only be able to handle so many transactions.
This topic is about allowing minimal use of free transactions for as long as possible by preventing individuals from sending dozens of free transactions per second at no cost. "limitfreerelay" increases the cost, but I don't think the way it does this is effective in prioritizing users who send only a few free transactions over those who send many.
Another way of improving limitfreerelay would be to randomly drop free transactions at an automatically-adjusting probability. High-priority transactions could have lower drop probability.