You need to use a ring buffer to hold the data to be serially transmitted and use the uart tx interrupt to send each character. I'm surprised the Serial class wasn't written to do this.
Right, as far as I know, HardwareSerial.cpp does not use asynchronous serial transmission, just receive. This app needs a ring buffer for sending data, and the ring buffer needs to be serviced by the USARTs interrupt. There is another thread where this was discussed and another member posted a link to beta code of HardwareSerial.cpp that uses async transmission.
But, his concern is what happens when the microphone needs to be sampled.
In the AVR world, interrupts can be prioritized. You can make the interrupt for the mic a higher priority than the interrupt for sending serial data. I expect that could be configured in the Arduino by writing to the registers directly.
And he is quite correct that NewSoftSerial is not a suitable tool for this, because without a UART, interrupts need to be pu down to send or receive even 1 byte of data. So the OP should look at an Arduino with more than 1 UART, something like Crossroads' 1284P board, which has lots of RAM for buffers and 2 USARTs. Then he can use the beta version of HardwareSerial.cpp for async sending. For interrupt prioritization, we'll have to consult the data sheet for the MPU.