There may be a solution to this problem. Here is a possibility.
We add a new field into the w3t_Users table called U_Privates. We use this field to store the number of unread private messages they have. Every script already grabs a few fields out of the user table (Status and StyleSheet) and passes this info to send_header. So we just grab the U_Privates field as well and pass this right along with it. This way we avoid the extra database call. It would mean modifying a few scripts that send private messages and when you read them but it may prove to be a useful addition. One thing, this would only take affect for new private messages after the upgrade as I really don't want to have to cycle through every user and calculate this in the altertable, that would be pretty big.
What do you think? Worth my time?