Lo que se suele hacer es ofuscar (ocultar, cifrar) el código. Así, cuando tú lo abres en NET Reflector u otros, el código es ilegible (o eso intentan).
Busca en Internet por:
"ofuscar NET"
"NET obfuscation"
Algún resultado interesante en nuestro idioma:
http://jorgepedraza.wordpress.com/tag/dotfuscator/PD. El llamado Dotfuscator que venía con Visual Studio recuerdo que dejaba bastante que desear, pero actualmente, aunque de pago y si sabes buscar, verás que hay excelentes ofuscadores de código NET que son difíciles de revertir.