Как правильно организовать PHP-код на CodeIgniter?
Всё неверно.
Вы плохо понимаете что такое модель, в классической архитектуре MVC. Всё потому что Codeigniter сам чудит, объясняю модель как хендлер хранилища. Обычно это называется Store, то есть то, что кладёт и берёт из базы. А модель в классическом её виде - это экземпляр объекта из этой базы. Проще говоря, модель - это строчка из таблицы, а Store - массив моделей (вся таблица в БД, кусок таблицы в БД), который их загружает или сохраняет в базу.
Так вот, в идеальном варианте модель должна быть за всё ответственна. Именно класс модели должен быть раздут, именно её вы должны загружать, а не библиотеку и не контроллер. Контроллер вообще, просто, как ГАИшник на посту, должен прочитать инпут, понять, что с ним делать, загрузить модели, сделать с ними что-то и отправить на оутпут.
Убираете всё из библиотек, пишете нормальные модели, придумываете к ним связи (вроде как вы их уже придумали), и работаете с моделями.
А ещё, в один PHP файл можно несколько классов понапихать, это, например, чтобы модель Activity представляла собой Активити, а класс ActivityStore в этом же файле как раз работал с таблицей где хранятся ваши Activity.
Я придумал всё сделать проще, подглядев как это сделано в Yii - в каждой модели у меня есть метод save(), который я вызываю напрямую из экземпляра модели и она ложится в базу. Так же и загрузка Product::get($id) вернёт объект класса модели Product, на котором я могу поменять пару свойств а потом вызвать прямо на этом объекте ->save();
Для// подгружаем класс работы с активностями
$this->load->library('activity');

// подгружаем класс работы с дестинейшенами
$this->load->library('destination');

// подгружаем класс работы с локациями
$this->load->library('location');
используйте autoload в конфигах.