Custom Field Types
Custom Field Type is an obvious solution, and I believe it is the officially supposed one (that's why I upvoted the Robert Kaucher's answer), however it has some very important drawbacks, which deserve mentioning here. I can recall at least these two:
- Custom Field Types are readonly in Access View.
- Custom Field Types are readonly in DIP (Document Information Panel, so when you create MS Office Documents you will not able to assign any values to your custom field from there).
And I know there are some other inconveniences, limitations and bugs, related to the Custom Field Types. Also, they involve quite a big amount of development effort, and the more code you write - the more you have to maintain, and the more places there are for bugs to hide :)
And yes, Custom Field Types are not available in Sandbox and Office365.
Actually, as of late (ok, actually for almost 2 years already), I tend to avoid using Custom Field Types unless they're absolutely necessary.
The other option
For your situation, I would recommend to consider a simple JavaScript/jQuery approach. I.e. after a page loads, your javascript finds all the checkboxes, splits them into groups based on their values, and wraps the groups into appropriate html markup.
I have to admit, this is a fragile solution. For example, each time somebody changes values of checkboxes or adds/removes a value, you have to fix your script to reflect these changes. But jQuery solution takes much less effort to implement, than Custom Field Types, and also has some advantages, thus I reckon this option deserves at least considering.
For example, if the set of checkboxes is fixed and never changes, or if you can garantee that responsible persons will use some particular format (i.e. "Category: Variant") when they add/modify the variants for the field, then this solution looks quite acceptable.
There are several helper javascript libraries which can help you with the implementation, for example, there is SPUtility.js open source project by Kit Menke.
I think, having some time, I can provide an example myself, if you need it.