First you need to Decouple item database from game. Size and number of variants you going for is your biggest problem here.
Having single parent actor/class for all items will make net of references all around game, yes it is maintainable, but single mistake and you have references back and forth all over project.
Having every possible item variation in single actor means it will be lots of data/code, and every instance (ie. every item) will allocate that memory. So that is no way.
Instead you should look into Data assets. But then i have no idea how asset manager handles 500k assets. Loading may be messed up. However with data assets you just drop file (that holds your structure) into folder and asset manager will register it. Then you can make editor widget tool to fill them up etc.
Imo, best way is to use LYRA project as starting point. Then see either data assets, or some external database. Best would be combination of both:
- customer/player gets item in possession
- some server side database (does not need to be written for unreal exactly, can be just regular database + some python code) sends template of such item to client
- client creates Data Asset based on item, and can use that item.