Acredito que o que esteja dando problemas não é o número de colunas, mas sim o tamanho dos objetos. Verifique com memory.size() antes da operação e veja se há espaço suficiente para alocar object.size() do último objeto. Pra funcionar, além de quantidade, é necessário que o espaço de memória esteja em um bloco de endereço contínuo.
Abaixo fiz um teste com cbind, trabalhando com 1000x mais colunas e rodou legal. Só que o tamanho dos objetos é pequeno...
n <- c(30, 217, 181, 4123, 3439)
n <- n*1000
for (i in 1:5) assign(letters[i], t(cbind(rnorm(n[i]), runif(n[i]))))
ls() # [1] "a" "b" "c" "d" "e" "i" "n"
for (i in 1:5) print(object.size(get(letters[i])), units="Mb")
# 0.5 Mb
# 3.3 Mb
# 2.8 Mb
# 62.9 Mb
# 52.5 Mb
x <- cbind(a, b, c, d, e)
str(x)
# num [1:2, 1:7990000] 0.675 0.15 -0.979 0.681 -0.944 ...
print(object.size(x), units="Mb")
# 121.9 Mb
gc()