I have found that the best way to tell someone their breath stinks is to say, "Excuse me, but your breath is a bit strong. Care for a mint?" and I offer them one (I usually always have mints with me).
But as far as greasy hair, maybe he worked out earlier or something and didn't shower after the gym? But usually when that's the case, people do apologize ("Sorry I'm a bit greasy, I worked up a sweat at lunchtime" or whatever). Then again, he might just not bathe every day. I used to work with a guy whose hair was so dirty it smelled from two feet away, and that was always an assault to the nose.
Gotta say, though, someone like that doesn't get a second chance with me. Could be the nicest guy in the world, but... ewww. And I don't need to be anybody's mother and tell him to wash himself.