Determine dependency injection type at runtime from config
Since the value that determines what type to use doesn't change I personally would prefer your first solution of a switch statement in the registration.
The current implementation of the factory pattern would lose any type safety.  If a parameter gets added to the constructor then then the Activator.CreateInstance would fail.  For example the database one might take in a connection string or sql object while the default one wouldn't.  Plus a naming convention would need to be understood and knowledge passed down in maintenance mode.  As the saying goes juice not worth the squeeze.
If the value to return could change based on a parameter being passed in then I would agree factory pattern could be used but as it stands I think the switch statement in the container registration is the simplest and meets the requirement.
There is still ways to create the factory pattern that would give type safety and DI but it ends up looking a lot like the switch statement.