Which is the more Performance effective way of handling this?

Making good use of mesh instancing is probably a good start, perhaps even using the runtime mesh generation to create built meshes at runtime to reduce draw calls and shadow rendering cost.

Impossible to say otherwise though, every game has it’s own unique challenges. Just make sure you profile often, and do some tests first. Decide what rendering features you do/don’t want to use early on.

Also, be wary of using Lego blocks explicitly. They’re (rightfully) very protective of their IP.