Metamask allows to attach data to any transaction. What happens if I send some data with some ETH to existing non-contract address? Is that data recorded on the blockchain? Can I read it later?
Yes. Data payload is recorded regardless if the destination address contains code or not.
Whenever you send a transaction it is recorded on the blockchain. So, yes, it can be read from the blockchain.
If the destination is invalid in some sense, the data & Ether get simply lost.
Bear in mind that not only contract addresses are valid - you can also send Ether to wallet addresses.
Answering my own question. I managed to send transaction to non-contract address with some ETH and single byte of data:
Previously that didn't work, because storing data needs gas, and Metamask did not calculate gas limit automatically. I set gas limit to 42000 - double the size of simple transaction for just moving ETH - and it consumed 21068 gas. So I assume that storing 1 byte is 68 gas on top of standard 21000 sending cost.