A question on Projectiles and making them efficient

So this is a question on efficiency, The game i am working on which will have a lot of magic spells flying around is bound to cause lag issues if i don’t do it right. For a little bit of background the Spells players use are all custom. This means they decide the kind of spell, the shape of the spell, the type of the spell, etc etc.

things i am already doing is setting up the spells to be in a “actor pool” essentially all the projectiles i think might be needed are loaded into the map immediately and then instead of spawning them i just move them out of the pool and into position and then instead of destroying them, they get moved back into the pool.

Now the real question is how should i set them up? should i have the parent spell and then create and add components for whatever each spell needs. for example if i make afire ball spell, it will Add sphere Collision component, add projectile movement component, apply settings from a struct. then the spell fires and when it is done and gets put back into the pool, those components are removed.

OR should i already have all those things in the spell already existing, as well as all the things other spells need, like the wall spell needing a spline so it can spawn static mesh instances. and just activate or deactivate those things i need and don’t need for each spell.

or is there a better option?

Having all those components spawned on begin play seems in efficient. Id setup actor classes for things like fireballs, explosions , ect and gameplay abilities, that the player can customize using a UI interface. Use soft references to minimalize the memory usage.