In my opinion JMS is more robust and much more scalable than the CCS. I explained why in this blog: http://blog.trivident.com/2012/09/tridion-and-jms-removing-another-spof/.
Also, see http://blog.trivident.com/2012/09/jms-the-nitty-gritty/ for additional configuration tips.
This article explains it pretty well: http://www.netcluesoft.com/rmi-through-a-firewall.html.
Port 1099 is indeed used only as the initial listening port, and then another (somewhat) random port is used for the actual notifications.
You can force Tridion to use a specific port by using the following code in a Java Listener (if using J2EE)
Unfortunately, you will have to indeed open up all ports > 1024 if you want to keep using RMI in order to have reliable communication for CCS.
If that's not an option, I would recommend to switch to JMS. Yes, its more work to setup, but you also get a lot more functionality and it works through firewalls as well. Julian Wraith wrote a nice guide to setup ...