Fair, and yes the NAT gateways still charge way to much especially if you have a lot of traffic. We decided the reliability of the AWS gateway was worth it for us.
Back when we used nat instances, we had 2 static instances - one in each AZ, but there was a script to check the health of them and take over the other AZ’s routes if it detected a network or aws health failure, which was a bit more common in those days. The modern instances have very few outages, though.
If I had to do what you’re doing, I’d just have a userdata script for the incoming instance un-associate the IP from whatever owned it, then associate it with whatever ENI came up with it, and update the route table for its AZ and not deal with ENIs itself.