There is not a way to do this with no downtime. Flatly not possible.
Building a whole new cluster as Val suggested is probably better. Just make parallel VSs and push the same policies to them. Policy push goes through VS0, so as long as you aren't using VS0 to pass traffic, it should work with separate "management addresses" on the new cluster. Build it with bonds. This approach lets you cut over one VS at a time by adding the only the relevant VLANs to the trunks.
If you don't want to go that route for whatever reason, I would deal with the interface naming problem first. With VSX, the firewall application cares very deeply about the exact interface names, so you should only let it know about bonds. It deals with exactly this interface naming problem, since the OS can back the bond with whatever physical interface name(s) you want. A bond with one interface doesn't need any special support from the switch side. You can use 'vsx_util change_interfaces' on the management to deal with this. It moves all references to one physical interface to another physical interface. For example, you can move everything from eth2-01 to bond5. There are two constraints: the new interface must already exist (you can't create the bond as part of the process), and there is hard downtime for traffic through an interface when changing the interface (Edit: just remembered a third constraint: the new interface can't be used for anything already). Be sure to remove the non-bond interfaces from the VSX cluster object's Physical Interfaces section.
Once you've moved the interfaces to names the new boxes can support, you can do the vsx_util reconfigure to have the new boxes take over the old boxes in the cluster, but they won't be able to sync (the 23800 has 24c48t while the 9700 has 16c32t; can't sync from more to fewer). When you fail over, you'll have hard downtime.