Посоветую вам начать с включения SQLALCHEMY_ECHO и просмотра плана результирующего запроса.
Как быстрый совет - ограничивайте запрос данными, которые вам нужны, и не бойтесь подзапросов. В большей части случаев бэкенд БД сделает всю оптимизацию за вас.
result = Context.query.join(
Request, Request.context_id == Context.id_
).join(
Point, Point.request_id == Request.id_
).group_by(Context.id_).with_entities(
Context.field1, ...
func.count(Point.id_).label('points_count')
)