If I don't want a gunner, I put an engie there. If I lose a crew, I don't want a gunner joining in another slot.
Fine. I'm seeing your logic here.
This is exercising more control than I typically do. I'm not going to bother trying to shuffle my crew just to get my gunner visually "next" to me. I see how you'd use it as a purposeful restriction, but the common game isn't going to be so finely tuned all the time. I don't think it's fair to employ a design that could let one engineer join an otherwise empty boat and forever screw that ship into never having a gunner. There may be plenty of matches in the future where some level 15 hwatchafish pilot is hoping for a gunner and can't understand for the life of him why he isn't getting one.
It seems simpler to detect one gunner, switch other slots to "Join as Engineer," and be done with it. However, I do think that there should be some compromise to allow the pilot to restrict what classes can join his ship before the match begins.
EDIT: Here's a funny idea: Default crew class is ALWAYS engineer. The pilot can assign gunners through the recommendation feature. This way the pilot gets to choose their gunner AND ammunition, and it is impossible for a gunner to join in the middle, like you want.
This would change how gunner is treated as a class, so the expectations for progression would need to be shifted. It could also inadvertently exclude newer players; never get chosen, never get levels, never get chosen.