It certainly isn't "necessary" for proper functioning of the Bitcoin currency, it's just something that people noticed they could do. But there isn't any obvious way to stop it, short of a complete overhaul of the Bitcoin protocol. There are lots of ways to insert small pieces of arbitrary data in a Bitcoin transaction (including even the addresses themselves). So I don't know how we would go about "moving data storage out of the block chain" even if we wanted to. We certainly can't do anything about the data that is already there.
The current standard way to achieve this is with the
OP_RETURN opcode in a transaction script. I understand the Bitcoin developers actually took steps to make this feature easier to use: not particularly because they wanted to encourage people adding data to the block chain (as you say it takes up space), but because
OP_RETURN is less disruptive than some alternative methods (for one thing, it is limited to fairly small payloads).