Если вы выбираете только небольшое количество NSManagedObjects, вероятно, не нужно много оптимизировать. CoreData и соответствующие ему классы (например, используемый вами FetchResultsController, который особенно хорошо работает с UITableViews) делают большую часть тяжелой работы за вас.
С точки зрения лучшего способа изменить порядок сортировки по возрастанию и по убыванию; это определяется примерно так:
NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"someEntityProperty" ascending:YES/NO];
Если для параметра Ascending установлено значение YES, ваши ключи NSManagedObjects будут отсортированы по наименьшему или наибольшему возрастанию) по предоставленному вами ключу. Если вы установите значение NO, вы вернете их от наибольших к наименьшим (по убыванию).