I want to combine these three matrices into a single array, you have only to write:
list={imgr, imgg, imgb}
to "access them" you then can write a function (rough example)
f[r_,g_,b_]:={list[[1,r]],list[[2,b]],list[[3,b]]} (*-> {r,g,b}*)
f[x_,y_]:={list[[1,(y width+x)]],list[[2,(y width+x)]],list[[3,(y width+x)]]} (*-> {r,g,b}*)
So if your goal is to access them with new notation you don't need to actually "need to re-arrange the physical array" (doing so is optional). Mathematica discourages use of for loops (read the book, 5 programming styles). But without a target format - commenting on "a good way to do it" is subjective.
What format depends on how you use the data (what the target image size is, if the image is in vga, supervga, ega, or a Mathematica rgb format, etc). idk if you will use the result with Import or if your end goal is "any x,y format yielding {r,g,b}"? If you will display an image after working with the data - then knowing the target format is essential. jpeg is awfully complex and there are more rgb image formats than there are songs in a top 100's song list.