How much does C# gain from its value types
Swift does the same thing (having both value types and reference types). I'm sure there are efficiency studies, performed by the people implementing the Swift compiler. 

But the difference between reference types and value types goes a lot deeper. What you need to look at is things like mutability, semantics when passing parameters, and so on. I don't choose reference vs. value types for micro efficiencies, but for the semantics.

So your assumption "the design decision is mainly to make small objects more cache friendly", is firstly wrong, and secondly I strongly doubt it makes things more cache friendly.