I would suggest one of two things.
The untyped ugly way:
Change the signature IWorker.DoWork to string IWorker.DoWork(object[] args).
This will allow total flexibility in arguments and future extension, at the cost of type safety. This will probably take less effort to implement, but will be a pain to debug.
The cleaner generic way:
Create a series of interfaces IWorker<T>, IWorker<T1, T2>, IWorker<T1, T2, T3>, etc. in a similar fashion to the Func<T>, Func<T1, T2> etc. delegates. In your case, your existing sites using the ConcreteWorkerA type would use IWorker<int, List<int>> and the ConcreteWorkerB sites would use IWorker<int, List<int>, string>. The instances of the versions with less arguments could always be converted to versions with more arguments by using a default argument for the extra parameters. So to continue to use the workers with different argument lists interchangeably, you would have to make the factory create workers with 3 arguments, and using default values where needed.
I don't think there is anyway you can practically make this extension without breaking all existing callsites, but the change you make now can provide a path for extensibility in the future.