On-chain stream items and asset transactions are all in the blockchain itself. With off-chain stream items, the data is outside the blockchain but its hash is in the chain.
The key difference between assets and streams is what they represent. An asset is something which is owned and can be passed from one address to another. A stream is not owned, but its data is easy to index and retrieve in all sorts of ways, and this is not shared by assets.
If you're just storing data on the chain and not passing something of value from one party to another, you should only use streams.
As for smart filters, they are quite like smart contracts in that they allow custom transaction rules to be embedded in the blockchain. More information here:
https://www.multichain.com/developers/smart-filters/