The abstraction we get from C# class inheritance, interfaces, virtual function calls, references, etc. helps a lot with stuff in the middle and left of that chart. And for many games, that's all you need. But some games have features at the right side of the graph, that demand the kind of high data throughput where these indirections are too costly, and the limitations/complexity of data-oriented approaches are a worthwhile trade for the speed we can get.