There are subtle differences:
billig often means cheap in the sense that it is of bad quality. So you'll for instance say that "Das Gehäuse sieht billig aus" meaning that the casing looks cheap, bad. You also have it in terms like "Eine billige Anmache" (a cheap pass on someone).
When saying preiswert, I still mean it in the sense "It is worth it's price". I would not say "Das Gehäuse sieht preiswert aus" to say that it looks cheap. When I buy a "preiswert" computer, it means that it has a good price/value ratio.
günstig is neutral for me, but often refers to a good opportunity. Just imagine you want to buy yourself a new car which costs you 25.000 €, but you get it for 22.000 € because it is in green, which you don't mind, then it was "günstig".