A discrepância em seu exemplo é que cada elemento do seu exemplo original ds.name é uma célula que contém um caractere (por exemplo, {'meu nome é'}), enquanto cada elemento de X é um caractere (por exemplo, 'meu nome é '). Se você alterar o tipo de cada elemento de X de um char para uma célula que contém um char, então você deve obter o comportamento que está procurando.
Isso é mostrado no exemplo abaixo.
X2={{'my_name_is'},{'matlab_thinning_hair'}};
Y = cell2struct(X2, 'name', 1);
Y.name
ans =
'my_name_is'
ans =
'matlab_thinning_hair'
Você pode conseguir isso para sua variável X indexando os elementos e realizando:
X2{1}={X{1}};
X2{2}={X{2}}
A ajuda do matlab aqui é bastante útil para isso tópico.