"Location: $3FFA1 & $7FFA1"
So this ROM has 512K PRG?
512K is too big for MMC1 usually, which means in order to make this work the game must be using SUROM (or something similar), which means PRG swapping is split between two registers:
$FFFF (or really anything in the $E000-FFFF range) gets the low 4 bits
$BFFF (or really anything in the $A000-BFFF range) gets the 5th bit
The code at $FF95 seems to be preserving the 5th bit, presumably so it can be written to $BFFF later.
Which means your view of the original bankswapping code is likely incomplete. Does this code eventually write to $BFFF? Or does it jump somewhere that does? I would set a breakpoints on writes to $BFFF and see what code is calling it and when.
But just going on what I see here:
Easy case: IF $3Cxxx and $7Cxxx banks are 100% identical
If this is the case, $3Cxxx doesn't need to be used at all and can be scrapped. These banks had to be duplicated on MMC1 because of a weird swapping quirk ... but on MMC5 you don't have that quirk so you don't have to worry about it.
You can wipe the $3Cxxx bank clean and use it as free space. And the $7Cxxx bank can be your "fixed" bank.
Harder case: $3Cxxx and $7Cxxx have some stuff that is not 100% identical
This is trickier because it means the game might be relying on the weird swapping quirk, which means you have to simulate it with MMC5.
(note: I am going to operate on the assumption that the game writes to $BFFF either immediately before or immediately after this bankswap code to apply the 5th bit. Double check that to make sure. If it doesn't, this is even HARDER)
The 5th bit not only selects the page for the $8000-BFFF range, but it ALSO swaps out the "fixed" bank at the $C000-FFFF range. This means that on MMC5, you'll also have to swap out the $C000-FFFF range according to that bit (the $3Cxxx bank when the bit is zero, $7Cxxx when it's one)
In both cases
In both cases, the manipulation the game is doing with $06C8 may or may not be necessary with MMC5 (not possible to tell from just this code). I would leave that code in to be safe -- having it there can't hurt. Then I would jump to your 'bankswitch' routine at $FFAA ... but the AND at $FFA8 needs to be changed to AND #$1F, otherwise you're dropping the 5th bit.
Also, any time the original game writes to $BFFF, you can either rip that code out entirely (if it's only be accessed from your bankswitch routine), or replace it with an appropriate call to your bankswitch routine (if it's being accessed from anywhere else). $BFFF writes have PRG swapping implications, so you can't ignore them entirely, but I strongly suspect the game is only writing there as part of this bankswitch routine.