There are three basic options:
- Use an obfuscator which will prevent casual disassembly, but may not stop determined reverse-engineers. You can find a list of obfuscators here.
- Use a client-server solution. The important code runs on a server controlled by you, and the user never sees the bytecode at all.
- Make all your customers sign a legal contract promising not to disassemble the code, or they have to pay a huge fine.