I really do believe that even the most optimized engines out there will hit a bottleneck with the sheer number of entities and components.
any code will bog if pushed too hard on too low end hardware.
a data oriented ECS designed to maximize cache friendliness ought to theoretically be perhaps the architecture (if not one of the architectures) that would bog down last.
data oriented ECS cache friendly optimization is what you do when you've already squeezed every clock cycle out of render and you're still not quite fast enough. Its an optimization method of last resort. oinly heard of one real world case ever needing it. that case is written up on gamasutra. might have been Spyro 2, or maybe Sonic 2. Spyro 2 i think maybe. use of containers with built in runtime checks would not typically be used in such a system due to the additional overhead. you going ECS out of desperation to become more cache friendly, the last thing you want to do is burn clock cycles on runtime checks.
there are actually may types of ECS's, with two primary possible benefits:
1. the ability to define new entity types from pre-defined component types without recompiling (IE data driven). most all ECS's have this. never heard of one that wasn't data driven.
2. cache friendly design (data oriented - as opposed to data driven). note that an ECS can be both. but data driven ECS != data oriented ECS. data oriented ECS is a specialized design above and beyond just data driven ECS.
its the data oriented ECS that would probably be the most performant of all architectures. but given the fact that render is almost always the bottleneck compared to update, data oriented ECS is typically an unnecessary optimization.