I guess, this is a rather ugly solution and I'm not sure, whether it causes any problems or not. But it does work to some degree:
If you replace
string(m_) in your suggestion, this will also prevent Maxima from evaluating the radical term. Try to add something like
disp_surds: block( matchdeclare(n_, integerp,m_, integerp), tellsimp(n_*sqrt(m_), n_*sqrt(string(m_))), return(true));to your question variables.