You have two options:
Reduce the gas price you are offering. You used 21GWei which is the network "standard" value, but if you don't mind waiting 2-3 minutes, then 1GWei is fine. See EthGasStation. That brings you to under a dollar.
Make more compact code. The Solidity optimiser is not bad at this, if you trust it. I do some coding in LLL which typically results in a code size around 25% of that of unoptimised Solidity. But grappling with LLL may not be worth the other 75 cents you could save :-)
[Edit] I thought of another one:
- If your constructor were doing a lot of storage then that would cost 20k gas per word. In your case I can see only 7
SSTORE operations, so this is probably not a huge factor. In fact, your 7955 bytes of contract data costs about 7955 * (200 + 68) = 2.1Mgas to deploy, plus the contract creation fee, which accounts for most of your 2.2 million total gas.
SSTOREoperations in your constructor code, so I'll have to have a closer look at where the gas is actually going. – benjaminion Aug 23 '17 at 13:00