If you required commercial/government users to pay, then you'd necessarily fail to meet the Open Source Definition, so it'd be impossible. The next best thing is indeed dual licensing. Choose a license that companies are irrationally afraid of, like the AGPLv3, and release your code for free to the public under that license. The dual licensing part is you say something to the effect of "if you don't like the AGPLv3, then you can pay for a different license instead". The FSF calls this "selling exceptions" and is completely fine with it.