You analysis shows that the PI is fast enough to transmit and receive the data.
The only conclusion left is that whatever you do in MATLAB is too slow. While the PI is not bad, it is no match for a somewhat recent PC.
So you may want to write the control program in a more efficient language, like C, or you can try to identify the parts that need the most ...
You can make the RasPi a router that routes data between the wired and wireless interfaces. But I don't believe that the old RasPi with the limitations of USB for ethernet will be strong enough to ensure an uninterruptible video stream. You can try it. How to setup a router you can look at Can a Raspberry Pi Zero W be turned into an USB WiFi dongle to any ...
If you like to use systemd-networkd you can create two instances of wpa_supplicant that each can be managed independent from the other. Here in short I would do it.
First switch over to systemd-networkd:
# disable classic networking
rpi ~$ sudo -Es
rpi ~# systemctl mask networking.service
rpi ~# systemctl mask dhcpcd.service
rpi ~# mv /etc/network/...
Use different wpa_supplicant files in How to set up networking/WiFi
describes how to setup networking to use different wpa_supplicant files for each interface.
Your etc/network/interfaces should work (only because it causes dhcpcd to disable itself) and can be configured to use multiple wpa_supplicant files, however this uses old Debian networking, which is ...
It worked with the following steps:
DigiMeshDevice instead of XBeeDevice
from digi.xbee.devices import DigiMeshDevice, RemoteXBeeDevice
from digi.xbee.models.address import XBee64BitAddress
os.system("sudo systemctl stop serial-getty@ttyS0.service")
# Instantiane an XBee device object
device = DigiMeshDevice('/dev/ttyS0',...