Just in case somebody hasn't grasped this:
The baud rate, really the number of bits per second that are transmitted, rely to one single character only. When using a baud rate of 9600, it means that the duration of a single zero or one bit is 104 us. This is valid inside a character, which typically involves transmitting eleven bits, of which eight are data. Thus the duration of one character is 1.15 ms.
The higher the baud rate, the shorter time between the bits. But it's up to the UART chip to handle this. It will receive the bits and put them together to one character. So far, it doesn't involve the processing capacity of the CPU.
It's when the UART has received a character the race starts. It will set an output to tell there is a character to read, and will start receiving the next one, if one more is transmitted. The character that's now ready to read must be read before the next one is assembled. If it isn't, an overrun condition will occur. This can be handled in different ways, but a typical result is that a character is missing. Or an error could be generated.
This means that you can have a very high baud rate, but still only send a single character every second. It doesn't make sense, but it's doable, legal and implies no significant load on the CPU at all.
What you can't do is have a slow baud rate, like 300, and send/receive many characters per second. At that baud rate, a single character takes so long to send, that you can't do more than 27 per second.
The benefit of using interrupts is that you can connect the "I have a character" output from the UART to the CPU's interrupt input, and have the CPU empty the single character buffer, regardless of when it happens. The CPU software doesn't have to repeatedly read the UART to see if there's something. It can do whatever it has to do, and the incoming character will be read when it occurs. The problem with this approach is that to manage high communication speeds, the interrupt service routine must be short and efficient.
You can say whatever you like about the interrupt servicing, for external interrupts coming from the expansion box, but it is neither short nor efficient.
That's why there's a problem with many characters per second. Not with the 38400 bits/second by itself, but the many characters per second it allows.