Performance issue

I have node called "Block" it contains the common properties for every block

And i have other properties depending on the block type

My problem that the other properties number up to 50 property and the number of blocks can be thousands so I am asking about the best way to model this case and the way to upload and query without performance issue

Here is my suggestion:
merge (a:CommonToAll{properties:["A", "B", "C"]})
merge (b:Block {name: "B1"})
merge (b1:Block {name: "B2"})
merge (b2:Block {name: "B3"})
merge (b3:Block {name: "B4"})

merge (c:BlockType {type: "A"})
merge (c1:BlockType {type: "B"})

merge (d:CommonToType {properties:["A1", "B1", "C1"], type: "A"})
merge (d1:CommonToType {properties:["A2", "B2", "C2"], type: "B"})

merge (a)-[:COMMON_TO]->(b)
merge (a)-[:COMMON_TO]->(b1)
merge (a)-[:COMMON_TO]->(b2)
merge (a)-[:COMMON_TO]->(b3)

merge (b)-[:BLOCK_TYPE]->(c)
merge (b1)-[:BLOCK_TYPE]->(c)

merge (b2)-[:BLOCK_TYPE]->(c1)
merge (b3)-[:BLOCK_TYPE]->(c1)

merge (c)-[:COMMON_TO_TYPE]->(d)
merge (c1)-[:COMMON_TO_TYPE]->(d1)
return *

ResultL:

Thank you for your reply but i think separating the common properties for example won't benefit me because if i have 10 common properties in all block nodes , i have to add common properties node for everyone but with different values, so it will give the same performance but instead of having 100 block nodes for examples i will have 100 block nodes and another 100 common block properties

I think the performance could be worse !

Does my understanding make sense?