In theory, I have seen a few places where Marketo says that a nested smart list is the most efficient way to load data.
But I tend to have the same suspicion as you that there is something not quite right about that approach.. I tend to think that in your example above I would use a segmentation and divide up the various teachers into segments of that.
At no time are nested smart lists an ideal solution. They will always load slowly because they call each smart list and return the values one by one and THEN they run the filters.
If you are able to, create a Segmentation for this kind of thing instead. Works well when sub segments are mutually exclusive or hierarchical and you have under 100 groups.
Another method is to run a data batch that looks for each type of Persona and Adds to List or appends Persona=X using Choice Steps.