First of all, there is no way to stop Miraak from this without manipulating the game mechanics a little bit. However, you do get all stolen souls back from him once he is killed at the end of the Dragonborn questline. Alternatively, killing a dragon over a body of water seems to stop Miraak from collecting their souls.