I have a simple answer:- Use a different PIC.
The 16F88 has 368 bytes of storage. At first sight that looks fine for 200 bytes of data. However, that 368 bytes is in 5 different places:-
0x020 - 0x06f
0x0A0 - 0x0ef
0x110 - 0x16f
0x190 - 0x1ef
and finally the 0x070 to 0x07f common registers.
You would need to use at least 3 of those areas, and you can't even do indirectly without messing around with the banking bits, because the FSR is only 8 bits so it can only access 0x000 to 0x0ff, and then you set the IRP bit, and it accesses 0x100 to 0x1ff.
And if you start that, you'll bump into the fact that the 16F88 can't even access its whole program space with goto or call commands.
What you want is a PIC that can do the job easily. The 18F series also have 8 bit registers, but they have banks of 256 bytes that can be accessed with a simple pointer, so your 200 bytes can all be handled in the same way. You also have 3 indirect pointers, so you can probably leave one for accessing the USART data, or even one to store the data and one to retrieve it.
Even better, use the 24F series. They have 4096 bytes of data or more, and with 16 bit registers that you can use as pointers, you can access whatever you want so much more easily.
You haven't said what you are using the data for. When you are receiving serial data, there is loads of time to process that data as it comes in. It can be that you can store what you need from the data as it arrives, even if you have to discard that later if the end of the data says that you don't need it.