Is It Possible to Have the iPhone Speak the Name of the Caller?
If you enable VoiceOver (in Settings → General → Accessibility), your phone will speak the numbers (or names for contact entries) of incoming calls. However it changes the user experience of the phone substantially (it will read everything on screen for you). I'm not aware of any way to enable VoiceOver just for phone calls unfortunately.

Another option would be to record custom ringtones reading the number/name for some of your contacts (you can assign custom ringtones in the Contacts app). This is obviously time consuming (although if you have  a Mac, you could speed it up with some scripting of Address Book and the system reader), and only useful for the contacts you set custom ringtones for—any incoming call not in your address book is out of luck.

There's very little integration with the Phone app available for third party apps—not much more than sending a number to call, so it's unlikely this could be solved by an app without jail breaking (and possibly not even then, I don't know).