Кроме usort/uasort можно разбить ссылки на отдельные массивы, а затем собрать обратно в один, который и перебрать с помощью foreach:
$arr = [
["small"=> "/images/0001_GOLD.jpg"],
["small"=> "/images/003_lux.jpg"],
["small"=> "/images/002_prod_3.jpg"],
["small"=> "/images/0002_GOLD.jpg"],
["small"=> "/images/002_prod_5.jpg"],
["small"=> "/images/002_lux.jpg"],
["small"=> "/images/002_prod_4.jpg"],
];
$lux = [];
$prod = [];
$gold = [];
foreach ($arr as $v) {
if(strpos($v['small'], 'lux') !== false) {
$lux[] = $v;
}
if(strpos($v['small'], 'prod_') !== false) {
$prod[] = $v;
}
if(strpos($v['small'], 'GOLD') !== false) {
$gold[] = $v;
}
}
print_r(array_merge($lux, $prod, $gold));