How can we see transactions in a particular block of Bitcoin, if they are encrypted and only Merkle root of transactions is stored on the blockchain. I think in that way we should be having an immutable ledger with private info protected (since we cannot reverse engineer the Merkle root hash to know the transaction info). But I've read that blockchain is facing scalability and privacy issues. Why can't we just encrypt the data in the block and let it be decrypted only with the private key of an individual?
Of course you can do that, but if you process off-chain only. In the same instant you try to read it decrypted, the private key shall be written on the blockchain for ever.
decrypt (stored_digest_pointer, private_key)
call will remain readable for ever.