One of the side effects of moving units around in positions like this, is that it confuses their orders.
For example, HELO:
You can place an empty unit and name each crew member before moving them into position via their Init field.
Using those names(global variables) at anytime during the mission with a single trigger,o1 setpos getpos temppos1; b1 setpos getpos temppos1; {unassignvehicle _x} foreach [o1,b1]; o1 moveingunner t1; b1 moveindriver t1
you can setposition them to another place and immediately move them back into different positions of that same aircraft without effecting the position of the aircraft. However, this causes them to immediately disregard their current waypoint order. The solution is to order them to move to another position somewhere(perhaps along the way) and then they will continue to their current waypoint.
Ground vehicles are different. You can use the same way to switch units around but they don't seem to respond after the switch, even after ordering them to move somewhere else. However, the better way to switch in ground vehicles is to use the code below in the OnActivation field of a trigger.o1 action ["eject",t1]; b1 action ["eject",t1]; {unassignevehicle _x} foreach [o1,b1]; o1 moveindriver t1; b1 moveingunner t1
This will not work for aircraft because as soon as you eject a unit from an aircraft, they are moved into a parachute vehicle.
To do this without having to name units, a script should be used to perform the switch. Using a script may allow you a chance to use the eject action for aircraft by ejecting them from the aircraft, unassigning them, ejecting them from their current vehicle(which will be the parachute), unassigning them from that chute and then move them back into position. Not sure what that would like visually(may leave behind a floating chute).
Hope this helps some.