I am wondering if there is any software or any way that the iPhone can can be made to speak the name of the person who is calling. The reason I am asking is because I use a bluetooth headset all of the time and need to know who is calling so I don't need to look at my phone all of the time.
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
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).
There is now such an App available in the App Store. It can even look up unknown numbers in the web (reverse Caller ID lookup) and then tells you who's calling. The App is called:
RingRing - Who's calling me from this number?