Yes I can cache server side, that was really the only solution. The question still remains about efficiency, though. I was hoping there was a way to work around the API and get the data during the LTI handoff, but that doesn't seem to be possible. Internally, Canvas has a sub-class for TeacherEnrollments so finding teachers shouldn't be that hard, but they're not exposed to the API in a straightforward way.
After some further investigation, I'm thinking one option is the
/api/v1/accounts/:account_id/courses
endpoint. (Accounts - Canvas LMS REST API Documentation) It has options to filter courses and to include the teachers in the response. This cuts out the enrollments step from my previous process. Unfortunately the Pandarus gem doesn't handle this endpoint properly, so I'm working on querying it with HTTParty myself ¯\_(ツ)_/¯