Over at Hackint0sh, we've started a bounty to encourage development of some type of IMAP Idle client/plugin for the iPhone. The idea being a background client which will support the IDLE protocol and signal an alert whenever a new message is up on the server. The user can then open the .mail app which, of course, will pull the mail down off the server. Sort of quasi-push, but better than nothing. I'm hoping that some of you might be interested in contributing to the bounty. Accessing mail on the iPhone is great, but to have "push" without having to resort to forwarding messages to a (very buggy and unreliable) Yahoo! account would be nirvana!
True "push" mail means that your mail client doesn't have to get your messages from the server (which occurs on the iPhone whenever you open the mail client). Rather, they are automatically delivered to your inbox as soon as they are received by the server. With an IMAP account, this is accomplished with the IDLE command, which keeps a heartbeat connection open between your client and the server. Unfortunately, the iPhone mail client does not support IDLE natively. Rather, "push" is accomplished only using Yahoo! accounts. Morever, Yahoo! is not true "push." Rather, it is a triggered pull, much like the way WM worked prior to WM5. Most likely, a hidden SMS message is sent to the iPhone which triggers the mail client to go get the new mail. This can work OK in theory, but it doesn't on the iPhone -- message boards are flooded with posts from people who find it unreliable at best.
There is a way to change the polling to less than fifteen minutes, but I can tell you that it is buggy and caused my mail client to go a bit crazy (I lost the ability to create new accounts).
The problems you have experienced with Yahoo are the same as others have reported, and this is why a different solution is needed.