Instantiating thousands of blocks gives big performance drop

Technically, yes. The game is still taking into account the polygons that are not visible (eg behind other blocks). Like stated above, the way to optimize this would be to use one mesh that only displays the blocks that the player can see.