The NACK at the end of a master read/slave send transmission is normal expected behavior.
In I2C communication the acknowledgement is a possibility to react to send data. For example, when the slave sends a NACK while the master sends data to it, it might be, because it currently cannot process further data. Acknowledgement goes in both ways, depending on ...
The TCA9548 is a switch.
You begin a transaction to it, change the channel that it allows through, and then end that specific transaction.
From that point on one and only one of the other two sensors are attached to your bus - the other doesn't exist. When you communicate on the address of that sensor it passes through the TCA9548 as if it doesn't exist.
It'll be easier if you use a struct, not a union. Store all the data you want to preserve in a struct, then cast a pointer to it to be a byte pointer and just treat it as an array of bytes and read and write those bytes to the FRAM.
The union you were using explicitly did the same thing, but it's not easy to scale to multiple items.
Some caveats about what ...
I'm a fool, I tried to detect other devices in the setup function before the Wire.begin(PIN_SDA, PIN_SCL, I2C_MASTER);
I Found it only because of you. The rubber duck. I started to write the program down to post it here and bingo.
That was the reason why the master had the "NACK" answer. The master was not started yet.