Is there a way to compute $y = (I_p \otimes A \otimes I_r )x$ efficiently? Where $A \in {\rm I\!R}^{q\times q}$ and $x ∈ {\rm I\!R}^{pqr}$?
I know that for $y = (I_p\otimes A)x$ this can be written as $Y=AX$ where $y=\mathrm{vec}(Y)$ and $x=\mathrm{vec}(X)$, but what's the generalisation when $y = (I_p \otimes A \otimes I_r )x$?
Yes. It is essentially $A\cdot [X]_{(2)}$, where $[X]_{(2)} \in \mathbb{R}^{q \times p\cdot r}$ is a rearrangement of $x$ such that the index $q$ varies along rows and the indices $p, r$ vary along columns. The result of the multiplication is $q \times p\cdot r$ which if you rearrange back properly should give you $y$.
Here is a patchy Matlab demo for the concept (can be made much more efficient I'm sure):
One wouldn't implement it like that I guess, but it serves to show the concept.