Not sure how large of m and n you deem "large", but certainly it should be obvious that creating a Table
for the purposes of populating a SparseArray
is, to be charitable, counterproductive (I'd use something much more colorful were an engineer working for me to do such things).
Take advantage of the sparse-aware Mathematica functions:
ArrayPad[ArrayPad[SparseArray@IdentityMatrix[{n, n}], {{0, 0}, {0, n (m - 1)}}, "Periodic"], {{0, 0}, {0, m}}]
Produces same results as yours and the current (only) answer, vastly faster (~60X faster than yours on 500x500 and well over order of magnitude faster than only answer so far). Side benefit - its sparse result needs only about 1/3 the storage compared to your method and existing answer.
N.B. The double padding is a bit faster than re-sparsifying to end dimensions...
ArrayPad
on an appropriate base... $\endgroup$