The question is an interesting one, and loaded too. It seems to assume that all racist/homophobic remarks are made with malicious intent. I have friends who make casual racist/homophobic remarks all the time, but 99% of the time it’s done in a harmless, jovial manner. Growing up in Singapore, I have had more than my fair share of Indian jokes. Am I going to feel insulted and harshly confront each and every person who asks me “Hey Visa, what’s the difference between an Indian and a bucket of shit?”? Nah.
Allow yourself to be offended by trivial things like that will never benefit you. On top of the unnecessary anger and frustration, you’d develop a delightful reputation for being overly-sensitive- and whether that’s actually true or not doesn’t count for anything. People would avoid you wherever possible, denying you the opportunity to correct any unfounded biases or prejudices they might have towards your race or sexuality. This send the discrimination underground- behind closed doors and in hushed whispers, which is even more difficult to deal with. Prejudices only get worse when the two opposing groups interact or communicate as little as possible. (Case in point: USA & Iran)
Personally, I find that the best way to deal with racist/homophobic remarks is to laugh it off. If you ever get insulted in a casual social context, I reccomend that you smirk, shake your head and go “Is that the best you can do? That’s pathetic.” That’s it. You’re the bigger man. There’s not much anybody can say in response that doesn’t make them look even worse than they already do.
If the racism or homophobia is in a more serious context, like at work, then there is cause for concern. Even then, though, I believe that trying to find legitimate solutions through a formal system won’t really make anything better. Let me paint you a scenario- let’s say I were the only Indian guy in a company (or class, or hostel, or platoon, or whatever). Someone makes a racist comment towards me. I get worked up, bitter and frustrated, and pursue the matter with higher authorities. The guy gets fired. Hooray?
Not really. I don’t stand to win much from the “victory”. My average colleague will think that I’m dangerous to deal with- they will start to watch their words around me, and probably try to avoid dealing with me as much as possible. While nobody might openly insult me, there will definitely be office gossip along the lines of “That fucking Indian got XYZ fired! Avoid him like the bubonic plague!” This would be even worse if I always hung out with the same group of people, who are probably all from the same social group (in this case Indians, but you could just as easily replace it with Gays, JC Students, Student Councillors, Rich Kids, you name it). Without consciously realizing it, everyone outside this little clique will start to marginalize me and my prospects for career advancement would start to look a little weak. I imagine this scenario holds true for most contexts- whether its in School, National Service, at work, whatever.
Then how? I say avoid the petty squabbles where there is no victor and focus on the big picture. Fix the problem at the root- be open-minded, outgoing, friendly. Communicate and interact with everybody and give them a chance to see that you are not the sort of person that they had pigeonholed you to be. Earn support and respect for who you are and what you can achieve, be benevolent towards those who you defeat, and be the person that you want to be perceived as- and there is no reason why “that fucking Indian!” cannot be a respected and accomplished individual in a Chinese-dominant community. (Replace “Indian” with “Faggot” or “Muslim” and “Chinese” with “Straight” or “Christian” respectively, and you will see that it stands true) I bet you that Barack Obama would approve of this message.