I'm sorry you're going through this. I don't have any firsthand experience, since my baby is still, well, a baby. But a couple of things jump out about your post. First, are most of your fights with your son about this friend you don't like? And, aside from the conversational subjects you find objectionable, is she really all that bad an influence? Is there a way you could let him socialize with her in a setting that you find acceptable? Like, maybe let them watch a movie in your living room or take them out for ice cream or something? That way you eliminate her as a source of the power struggle between you and your son.
Second, has he gone through any recent life changes (divorce, new baby, new school)? Frequently kids start acting out as a response to stresses in life. Have you tried talking to him about what's going on with him? And by "talking," I mean asking him if anything is bothering him and listening without judgment (which I know can be hard).
Third, depending on where your son's grandparents live, your relationship with them, and how bad this gets for you, would it be at all possible for you to let him live with them for a while? I bet if he does, he might find out that he doesn't have it so bad at home with you as he thinks. And it might be a nice break for the two of you so that you can start fresh when he returns.
Finally, I think you really need to reexamine the way you relate to him. If you find yourself alternating between yelling and being nice and sweet to him, you're not being consistent and kids find that confusing. It might be helpful to really think about which of his behaviors are just him being a normal child who is testing his limits (e.g., choosing his own friends) versus those that are truly unacceptable (e.g., lying and not completing his classwork).
There are a number of good parenting books out there that you might find helpful. I liked the Positive Discipline books, as well as the Love and Logic books.
Good luck! I hope things get better for you and your family.