What should be best practice when creating custom fields?
If you find yourself wanting to give really long custom field names, think about whether you really should have a fairly short label and then provide help text that goes along with the field.  

Besides causing database problems (though CiviCRM largely handles that on its own by just cutting off the field name), you'll have trouble displaying a super-long field name on forms and in reports.

For values, are you actually experiencing this problem?  If multiple choices are allowed in a field (let's say all those numbers are available as checkboxes), they're separated by a delimiter character in the database.  Searching for 2 won't pull a contact with 12, and searching for 12 won't show results that have both 1 and 2.

In the field itself, the storage is like (not with an asterisk but an unprintable character) "*1*2*6*" for having 1, 2, and 6 checked.  It's stored like "*11*12*" for having 11 and 12 checked.  They're easily distinguished.