Сам сталкивался с такой задачей когда только начинал осваивать AS, убил немало времени. Но когда решаешь проблему сам, то с последующими справляешься намного быстрее.

Код AS1/AS2:
/* common_mc - общий контейнер для всего этого барахла */
_root.createEmptyMovieClip('common_mc',_root.getNextHighestDepth());
/* Это твои массивы с текстом и загружаемыми картинками */
var tx1:Array = ['Text1A','Text2A','Text3A','Text4A'];
var tx2:Array = ['Text1B','Text2B','Text3B','Text4B'];
var img:Array = ['n001.jpg','n002.jpg','n003.jpg','n004.jpg'];
/* Здесь в цикле созддаются индивидуальные контейнеры-клипы - tmb, а в них соотвественно
грузятся картинки, и размещаются текстовыве поля, идет заполнение этих полей данными из массивов */
for (var i=0; i<img.length; i++){ // Количество проходов цикла = длинне массива img[]
var tmb = common_mc.createEmptyMovieClip('tmb'+i,i+1);
var _img = tmb.createEmptyMovieClip('_img',1); // Сюда будет грузится картинка
var _tx1 = tmb.createTextField('txt',2,100,0,100,20); // Текстовые поля
var _tx2 = tmb.createTextField('txt',3,100,20,100,20); // ---
_tx1.text = tx1[i]; // Заполнение текствовых полей
_tx2.text = tx2[i]; // ---
loadMovieClip(img[i],_img); //Стартуем загрузку картинки из массива img[] в контейнер _img
tmb._y = i*100; // Сдвигаем каждую tmb по вертикали
}
function loadMovieClip (path:String, target:MovieClip){ // Это - функция-загрузчик картинки
var mcLoader :MovieClipLoader = new MovieClipLoader();
var listenerLoad :Object = new Object();
listenerLoad.onLoadInit = function (target:MovieClip)
{
/*Здесь размещаем код по масштабированию, позиционированию,
а также по древнему орбяду обрезания (загруженной картинки) */
}
mcLoader.addListener(listenerLoad);
mcLoader.loadClip(path, target);
}