Have you explored the capabilites of Manipulate
yet?
Manipulate[
MatrixPlot[TestArray,
Mesh -> m,
ColorFunction -> cf,
PlotRange -> {{xmin, xmax}, {ymin, ymax}}],
{xmin, 1, 50, 1}, {ymin, 1, 50, 1},
{xmax, 51, 100, 1}, {ymax, 51, 100, 1},
{m, 1, 50},
{cf, ColorData["Gradients"]}
]

Here's a slightly more mouse-y one:
coordsToRowColumns[pt_, mag_, w_, h_] :=
Module[{rmin, cmin, rmax, cmax},
rmin = pt[[1]];
cmin = h - pt[[2]] ;
rmax = pt[[1]] + mag ;
cmax = cmin + mag;
{{cmin, cmax}, {cmin, cmax}}]
TestArray = RandomReal[1, {100, 100}];
Manipulate[
Row[{
MatrixPlot[
TestArray,
ImageSize -> 200,
PlotRangePadding -> 0,
ColorFunction -> cf],
MatrixPlot[
TestArray,
ImageSize -> 400,
PlotRange -> coordsToRowColumns[pt, mag, 100, 100],
AspectRatio -> 1,
ColorFunction -> cf
]
}
],
{{pt, {0, 100}} , Locator},
{{mag, 50, "Magnification"}, 1, 100},
{cf, ColorData["Gradients"]},
ControlPlacement -> {Bottom, Top}]

I prefer this kind of view, sometimes, over a simple zoom in/out style. Here, you can see an overview of where you are, so you don't get lost, and you you can change the magnification without changing the location. There's room for improvement, though.
MatrixPlot
done, click once on it and pressing a small orange rectangle at the bottom of the plot, drag it to zoom your plot. Use simplyRandomInteger[1, {100, 100}]
instead ofArray[RandomInteger[{0, 1}] &, {100, 100}]
. $\endgroup$