Early I posted a question about plotting county names on a map using ggplot and maps found HERE. My first approach was to take the means of all the lat and long coordinates
You can take a look at the directlabels package, this provides automatic labels placement using a number of algorithms that avoid overlap. I'm not sure if it can be used to solve your problem, but you could take a look.