What is the technical definition of "dust" that is allowed to be sent with a mixin of 0?
Is there any way I can avoid or reduce dust creation?
Dust is not a very well defined term in general. However, in the context of your question ("allowed to be sent with a mixin of 0"), this is about which outputs have enough other outputs of the same amount on the blockchain. If there are enough such outputs, then the output is not considered dust for the purposes of mixin 0 rules. If there are not enough, then it is. "Enough" here is defined as two within the current monero rules: the minimum mixin is 2 (except when dealing with that dust), so you need two other outputs with the same amount as the output you are considering.
Dust used to be created all the time, but is now less so. The main offender was the mining pool software, which would send small amounts at every block, with "complex" amounts such as 0.000026483653. Unlikely to find a lot of outputs of that particular amount on the blockchain. The block reward was also dusty till the first hard fork. Now, dust creation is much more rare, for the following reasons:
Moreover, once RingCT is included in monero, this problem will disappear altogether since amounts will be encrypted, and all/many new inputs will technically have "weird" amouts, but they will be mixable with any other, regardless of amounts.
The only thing I'd suggest now is, if you are mining, use a pool with a higher threshold. While they won't send dust anymore, you want to avoid small outputs since sending them takes up more in fees.