This is a very common situation, which I've seen many times over the years. Regardless of whether you're turning down and replacing legacy Point-to-Point T1 circuits, integrating networks in an acquisition/merger, or just changing providers as in this question, the solution will almost always involve utilizing your existing network equipment/routing configuration for transiting traffic between the different networks. That is the simplest solution and gives you the greatest level of control.
To get on my soap-box for a minute, this is where a clearly-defined, hierarchical network design comes in handy. If you're utilizing a design with Core-Aggregation-Distribution layers (or even a simple Core-Distribution layer setup), you would simply connect each separate MPLS service provider to your Core/Aggregation equipment.
Once the routes to each site (regardless of provider) are in your Core/Aggregation equipment, your network's existing routing protocols can handle the traffic distribution between the two networks. To any router, they will simply be separate subnets available on your network.
Current configuration:
MPLS Service Provider A
|
BGP
|
-~-~-~-~-~-
|100 Sites|
-~-~-~-~-~-
Desired End configuration:
MPLS Service Provider B
|
BGP
|
-~-~-~-~-~-
|100 Sites|
-~-~-~-~-~-
And you're seeking the bridge/migration strategy between the two.
EDIT: Clarifying the below solution description per @fredpbaker's comments.
I see two solutions, which both involve connecting your MPLS providers into a core layer at one location (although two would be better for redundancy purposes, and is what is diagrammed below). This would allow your existing network equipment to connect the sites from each provider.
At all other locations/sites, the MPLS provider would be irrelevant. They could be connected to Provider A or Provider B (or both), and traffic would flow between them.
First, you could redistribute BGP into your existing IGP and allow your equipment to route the traffic transiting between each provider:
Redistribute into OSPF/EIGRP
/ \
-~-~-~-~-~- -~-~-~-~-~-
| Core A |-\ /-| Core B |
-~-~-~-~-~- \ / -~-~-~-~-~-
| \ / |
| / \ |
BGP BGP BGP BGP
| / \ |
-~-~-~-~-~-~- -~-~-~-~-~-~-
| MPLS SP A | | MPLS SP B |
-~-~-~-~-~-~- -~-~-~-~-~-~-
| |
BGP BGP
| |
| |
| |
-~-~-~-~-~-~-~-~-~
| 98 Other Sites |
| Connected to |
| Either MPLS |
| Provider |
-~-~-~-~-~-~-~-~-~
Secondly, if you don't have an IGP running, or don't want to redistribute into it, you could utilize Inter-VRF routing with VRF lite (as laid out by Stretch over at PacketLife), and take the routes from each provider into a VRF on each Core router, and export them to the appropriate VRF:
Import/Export routes between VRF's as needed
/ \
-~-~-~-~-~- -~-~-~-~-~-
| Core A |VRF-B VRF-A| Core B |
-~-~-~-~-~- \ / -~-~-~-~-~-
VRF-A \ / VRF-B
| / \ |
BGP BGP BGP BGP
| / \ |
-~-~-~-~-~-~- -~-~-~-~-~-~-
| MPLS SP A | | MPLS SP B |
-~-~-~-~-~-~- -~-~-~-~-~-~-
| |
BGP BGP
| |
| |
| |
-~-~-~-~-~-~-~-~-~
| 98 Other Sites |
| Connected to |
| Either MPLS |
| Provider |
-~-~-~-~-~-~-~-~-~