This is just a plain wrong statement, for two reasons.
First, if you have 10,000 different files on disk, you have to figure out which file to read. That takes time and cache misses.
Second, even if you have 10,000 entries in a single file, that file can be arranged in some way that will accelerate access to a specific item by ID – like a hash map, or a sorted search.
Also, a single large file will absolutely load faster during game startup, than 10,000 small files.
But, in practice, the challenge for these games is almost always asset creation, not the time to load the data. And Unreal will typically bake all your little files into one bigger file when it packs up the game, anyway, so you can get the best of both worlds.
How I would structure a “character gets bonuses from objects” system, is to implement a “get bonus” interface on each of the kinds of Components you can add to your main Actor. When you equip or unequip an object, you’d simply reset your character to base stats, then iterate through all objects on the character, and call this interface (if present) to get the modifiers and apply them, and then store the calculated value as the “effective stat” value that you actually use for gameplay.
It turns out, this pattern is so common, that Unreal even has a built-in system to do this, called the Gameplay Ability System. However, because the GAS was the foundation for gameplay in the MOBA game Paragon, it’s quite fancy, and pretty hard to get going with in the beginning, especially for beginners, so I highly recommend building your own based on the pattern I describe above to get started.
Will there be a very small amount of time taken to evaluate each object when you re-calculate stats? Yes. Does that matter, at all, when it only happens when the player changes equipment? No. You won’t be able to actually measure the difference in frame rate. And, once pre-calculated, the “effective stat” value variables are fast to access and use.