Is there anything built into the protocol to stop abuse? Bouncing coins around infinitely in order to store large quantities of data in the transaction metadata (as opposed to the fake address method described ITA)?
In order for a transaction to enter the block chain, it needs to be relayed by bitcoin nodes and picked up by a miner who is willing to add it to a block.
Bitcoin nodes have criteria that need to be satisfied before they relay the transaction. For example, version 0.8.2 of the reference client will not relay transactions with outputs smaller than 0.00005430 BTC. There are also rules for calculating a minimum transaction fee, and a 15000 bytes/minute cap to the amount of free transactions relayed.
If your transaction isn't relayed, you can still circumvent this by connecting directly to a miner. But the miners have their own rules for prioritizing transactions and limiting block size.