I just tried it, but as I suspected, it doesn't get fired. I now believe if you want to process characters you need to put the character test in another function outside a Serial.available loop.
That to me would an over-complication. I'd rather just stick with the 5 ms. I've been on this for a couple of days now and my head is swimming. Perhaps after a few days I can think straight about it again or someone can send me my last sketch modified to work without the delay.
delay(5) is Arduino's sleep command I assume. It stops processing for 5 milliseconds.
I just read your modification. I wouldn't be surprised if it doesn't work in Hyperterminal either. But I'll be sending from a C# (.NET) program so should be able to adjust.