Every SCM that exists will fail spectacularly at merging two refactorings that touched the same code. You simply can't solve this with software today.
Enter... merge pain.
The only real solution that doesn't involve developers avoiding refactoring unless they really need to (either because it's painful or because they don't know they should be doing it), is trunk-based development.
As a footnote, for what it's worth... multiple services with SoC is definitely a good thing, but I don't think trunk-based development precludes that.