Если я правильно понимаю, то вы хотите, чтобы ваш CompareTo всегда реализовывал «естественный порядок» для класса. Это означает, что клиент класса будет ожидать, что класс будет вести себя. По контракту сравнение должно быть согласовано с equals, поэтому я всегда использую equals как:
return compareTo(obj)==0;
Это гарантирует последовательность.
Тогда, если вам нужен другой порядок сортировки, вы должны реализовать другой класс, который реализует Comparable. Таким образом, вы можете иметь согласованность классов и отдельные порядки сортировки.