Как личное предпочтение, мне обычно легче читать и понимать, если есть меньше вложенных уровней для прохождения. Таким образом, я склонен использовать ...
SomeType *pSomeType = &asManyLevelsAsItMakesSense[someIndex];
pSomeType->subSomeNestedLevels = ...;
Я нахожу это особенно полезным при работе с глубокими вложенными структурами в циклах. Определите инвариантные вложенные части и извлеките их из цикла.
SomeType *pSomeType = &...;
for (i = 0; i < N; i++)
pSomeType->field[i] = ...;
Как всегда, стоит узнать ваш компилятор и что он на самом деле генерирует. Иногда вы можете зависнуть от компилятора для вашего проекта, который вообще не оптимизируется, и такие мелочи могут иметь значение (но не думайте, что это произойдет).