How is possible to find/verify a transaction thanks to the Merkle Root hash ?
By constructing a
Merkle path to the root node of the Merkle tree.
(The hyperlink has a very good explanation of how it works; in fact the whole book is a good introduction to the nitty-gritty of bitcoin)
Where are the old blocks and transactions stored ?
Blocks are stored as a LevelDB database on the harddrives of computers that run the bitcoin client (i.e nodes) in
$DATADIR/blocks On computers running Windows 7 and later the full directory path is:
C:\Users\YourUserName\Appdata\Roaming\Bitcoin\Blocks"Transactions" aren't stored individually, but are validated in blocks and stored as blocks.
Unspent Transaction Outputs (UTXOs) which represent the "Bitcoins" that are valid and can be spent.
They are stored as a database in the
$DATADIR/chainstate folder.
How do the miners decide whether a transaction is legit before adding it to the block ?
Miners do not have special power to "decide" which transaction is legitimate or not, instead node software determines that on its own following a set
of established protocols The protocols state that bitcoin is able to act as money eg it must not be able to spend more than it has (i.e Outputs CANNOT be greater than inputs -- except in Coinbase transactions), it must not have been spent elsewhere (i.e it must be included in the UTXO set and the output being referenced shouldn't be present in the blockchain), it must be "mature" (i.e the nLockTime must have elapsed), etc.
If miners create a block that contains at least one invalid transaction -- coinbase or otherwise -- other nodes in the network will reject the block as invalid and the miner would have wasted his electricity used to create the block.