Does this interrupt improve performance even with while loop in ISR?
Branching to the interrupt, saving registers, restoring registers, and then returning from the interrupt all take clock cycles.  If the only thing you are doing is transmitting this serial data, then not having the interrupt is going to use less clock cycles overall.
Some other comments about the code.

Blocking while you send multiple characters within an interrupt will cause you to stay within the interrupt for hundreds of us to several ms depending on your baud rate.  Generally speaking its good practice to enter and leave an interrupt quickly (like within a few us or 10s of us).  Therefore blocking while you send multiple characters within an interrupt is generally not good practice.

Typically one would add characters to a FIFO and then enable the transmit data register empty interrupt.  The interrupt would send only one character and then return.  Once the character was sent, the interrupt would occur again and send the next character.  Once the FIFO was empty the interrupt would be turned off.  This would allow the characters to be sent essentially in the background while other code executes.

Use of a loop inside of an interrupt is usually not good practice (especially if the loop bounds are not well known).  It can create the same timing problems mentioned above.