What is the most efficient/optimal way to upgrade a factory contract? Let's say I have a factory contract which can generate 3 different child contracts, how can it be upgraded to be able to generate 5 different child contracts in the future instead of 3?
You'll have to deploy a new factory, and update every reference from the old factory to the new one. Whether that's doable, depends on your situation.
If you have a main contract which contains a reference (address) of the factory, you'll have to update that address.