How would I do that without outage(forcing customers to enter their card data manually again)?
Storing card data is a no-no due to PCI DSS. I mean, I can store the name and the card number but not the cvv code which makes it useless in case of migration, since cvv is one of the three details needed to save a card with payment processor.
Easier for products/e-commerce I'd imagine because that's many single transactions and you wouldn't need to email older customers.
We were lucky. We used a payment provider early on that used Stripe in the background. The product and prices configuration was a bit messed up but we owned the Stripe account and started building our own checkout etc.
BTW Stripe allows companies to move between countries. You'd need a second Stripe account but their customer service can move over all customer and subscription records. I'd imagine it's the same should two companies merge or such.
[1] https://stripe.com/docs/account/data-migrations/pan-import
It's a little bit more work, but not that much more work, because you can already process with the existing, and you already plan to figure out how to process with the new, but you would need to build context sensitive switching.
As a bonus though, you'd be able to switch things around if one processor is having an outage or if one is better for some customers than the other.