Ik weet niet of het sneller is, maar het lijkt een stuk minder typen...
SELECT x.*
, IF(@prev = dept_id
, IF(salary <> @psalary,@i:=@i+1,@i:=@i)
,@i:=1) rank
, @psalary := salary
, @prev := dept_id prev
FROM my_table x
, (SELECT @i:=1,@prev:='',@psalary:='') vars
ORDER
BY dept_id,salary;