This is not a precise answer to the actual question, but the list of answers is from 2012 and IMO does urgently lack a note about [`Association`](http://reference.wolfram.com/language/ref/Association.html). Since version 10 (2014) these will solve the underlying problem by offering an alternative for such cases:

 ClearAll@matM
 matM = Association[]
 matM[i] = ConstantArray[1, {10, 10}];
 matM[[Key[i], 1, 10]] = 10

For every case where one uses downvalues as a hashtable using `Association` instead like shown will also have many other advantages. I have not made tests but I would be very surprised if the above wouldn't be much more efficient than any of the alternatives. Of course using an `Association` will not work in all cases, e.g. when one needs a mixture of patterns and constant "indices" in the downvalues of a symbol. But for a vast majority of appications where one runs into the mentioned problem nowadays `Association` will certainly be the best solution.