Du gehst einkaufen und du hast wenig Geld. Ich kenne drei Wörter, die du für cheap Waren und/oder Geschäfte du benutzen könnest.
Welchen Unterschied gibt es hier?
billig means low price, but usually also low quality
preiswert means it is worth its price (this may be a low or high value, you usually use it for a higher value)
günstig means it's a good price for the quality
For all my life, the antonym for "teuer" has been "billig". It is also used to indicate shit quality but it did by no means add that notion to everything.
Marketing fears it does though and so they refrain from using it in favor of the less negative sounding "günstig" and "preiswert". I do not agree with the other answer that there is a difference. They all signify "cheap" for the general public.
The constant bombardment with "günstig" and "preiswert" through adds does have an impact on which word people use in their daily life but at least in Berlin "billig" is BY FAR the most natural one. If someone avoids it, it always feels forced to me.