I2C расширители портов довольно дорогие и по даташиту, например MCP23009, максимум можно только 8 таких расширителей на I2C поставить, а при требуемых 64 выходах и 32 входах этого явно не хватает. Поэтому старый способ увеличения портов регистрами сдвига. И не уверен, что какой-нибудь 74HC595 сможет включить оптопару. Даже если сможет, то в схему надо будет добавлять на каждый выход регистра токозадающий резистор, что усложнит печатку.
MAX7300 - 28 портов, цена 140 руб. (7301 для SPI) входная емкость 10пФ (при том что на шину максимум 400пФ) работает на скорости 400 кбит/с. ток порта 30мА правда максимальный ток по GND 800мА.
Так же есть много драйверов, с 8-16 выходными мощными ключами и наличием опторазвязанных входов (как-то попадались мне такие) , количество элементов на шине i2c ограниченно их общей входной емкостью и максимально возможным коэффициентом адресации.
Можно использовать вторую шину I2C.
Я просто предложил, как вариант.Я сам еще эксперименты на железе не ставил, поэтому не утверждаю что это самый лучший вариант, есть еще и другие интерфейсы широко поддерживаемые МК на аппаратном уровне и производителями ИС, повторюсь -для этого интерфейса много библиотек и различных ИС.
Просто, с интерфейсом, можно предусмотреть возможность расширения и модификации, без необходимости что-то переделывать в основной плате, что является только плюсом.