If you really require existing entity classes to remain unmodified, and only use your subclass extension in new situations, then the cleanest possible way I can think of still requires that all calls to
Code:
new SomeEntity()
get changed to something like
Code:
EntityFactory.CreateInstance<SomeEntity>()
However, since you now own and can directly modify all of the legacy code you're extending (is this the case?), and if the entity classes you need to extend apply to all existing uses, then can you just modify the legacy entity classes directly to add additional properties? Then the entity types remain the same, and very little if any legacy code needs modification.
We had to create our plugin infrastructure because our custom services department and our customers will not be modifying the base product's code, only replacing compiled types with subclasses. This is not so much for intellectual property reasons as it is for making it possible for the base product to be updated by just dropping in new DLLs. When they replace an entity class with an extended one, they're telling the system that they want their replacement used everywhere. The entity factory is needed because they can't change existing compiled code that refers to the unextended entity type, and that base code needs to magically get and use their extended type without realizing it.