The simplest representation of thrust is the Zucrow rocket equation, F = [ M / 32.1 ] x Ue where F is the thrust in pounds, M is the ejected massflow rate in lb/sec and Ue is the ejection velocity. This is not adequate for design, but it helps in understanding a couple of important points.
The velocity Ce will vary with the pressure difference between the internal cylinder pressure and the ambient pressure you're working in. With a gas as your working fluid, this will vary from a very high to a very low value, approaching zero velocity as the pressure becomes fully equalized. This is a very wide range of velocities to have to tolerate during operation.
With a liquid as the working fluid, the action is improved in several ways. Suppose you start with half the cylinder filled with liquid, and half compressed gas. The range of pressure variation will only be 2:1, since the gas will only double in volume by the time the liquid is fully ejected. The jet velocity will be much lower [for a given nozzle area] due to the viscosity of the liquid, but this is more than compensated for by the MUCH larger mass flow as long as liquid is available. Also, the gas pressure is available for a much longer time, again because of the reduced exit velocity. All this explains why a kid's water rocket works so well when half full of water, and so pitifully when you try it with air alone [even though there is twice as much air available, and you can pump it up to the same starting pressure].
Now, there is an additional advantage if you really MUST use CO2: If you size the nozzle so ejection is slow enough, the expansion of the CO2 won't cause freezing of the gas. Getting the nozzle size just right would be a matter of experimentation. As suggested above, water probably isn't the best choice for the working fluid, since it will freeze before the CO2 does; however, it is probably the only 'non-polluting' liquid you can use under most circumstances. I don't think an old-style Seltzer bottle ever freezes up, no matter how constantly it gets used [but the nozzle area is so small, you probably don't get much thrust, either].
The trick would be, rather than go for absolute maximum thrust, try to size the nozzle so you get good usable thrust as long as the liquid lasts, without freezing either the liquid or the CO2 above it. Naturally, when using a liquid working fluid in this way, I'm assuming that you can always ensure that the liquid stays in contact with the nozzle until it's exhausted. In the water rocket, both gravity and forward acceleration take care of this for you. If you need horizontal ejection, or you're expecting inertial effects [e.g. sloshing of liquid during cornering], you'll have to do a lot more complex design to keep it working. [This would not be the case with gas as the working fluid.]
There is no point in trying to use a deLaval [convergent/divergent] nozzle for a liquid rocket stream, since the velocity will be relatively low; a simple, very smooth-surfaced convergent nozzle with a straight exit should be ideal.
LarryC