Is It Possible to Have the iPhone Speak the Name of the Caller?
Solution 1:
I'm using since years the app CallTell available on cydia (so available only for jailbroken devices). I've tried it on iPhone 3GS, 4,4s and now 5 and it worked fine, even though since I've updated to iOS 6.0.1 I'm having some bugs on it, the reason why I was here looking around if there is another app doing the same job....but I really encourage you guys to try it if you have none. The app doesn't add an icon on your home screen, is set up on the device settings screen. The app speaks call, messages (caller and/or text) and even applications notifications. All of these things can the configured on silent, ringing of both modes. You can put it on, off and even configure the text to speak before the name
Solution 2:
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).