回答できないですね。質問の求める方法は無く、質問のコード例が必要最小限の書き方だと思います。
下記方法が考えられますが最後に余分なデータが残り、結局 A(1:5)とアクセスする必要があります。
for i = 1:5
A(i:i+2) = rand(3)^(i)*rand(3,1)
end
メモリには困らない時代なので、計算結果を広げて必要箇所を拾っていく(不要部分を捨てていく)形が良いと思います。
arrayfun(@(i) rand(3)^(i)*rand(3,1), 1:5, 'uni', false)
cell2mat(ans)
ans(1,:)