Nein, das macht nicht das gleiche. Bei
\expandafter\ifx\csname @ifundefined\endcsname\relax
wird \@ifundefined durch \csname @ifundefined\endcsname zu \relax, falls es vorher nicht definiert war. Falls es definiert war, bleibt es unverändert. Dann wird dieses \@ifundefined mit \relax verglichen.
Das ist also letztlich ein Test, ob \@ifundefined undefiniert oder \relax ist, wobei als Seiteneffekt \@ifundefined zu \relax wird, falls es nicht definiert war.
Dagegen prüft
\ifcsname @ifundefined\endcsname
, ob \csname @ifundefined\endcsname einen Befehl definieren würde. Mit anderen Worten, es testet, ob \@ifundefined undefiniert ist.
Die beiden Tests unterscheiden sich also in zwei Punkten: Wenn \@ifundefined nicht definiert war, ist es nach dem ersten Test \relax, nach dem zweiten aber noch immer undefiniert. Wenn \@ifundefined \relax war, schlägt der zweite Test fehl bzw. führt den \else-Zweig aus, während der erste zutrifft. Vor allem dieser zweite Unterschied kann fatal sein. Daher ist eine bessere Ersetzung eventuell:
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname @ifundefined\endcsname
Diese definiert ein nicht definiertes \@ifundefined ebenfalls nicht als \relax, der Test ist ansonsten aber der gleiche wie bei
\expandafter\ifx\csname @ifundefined\endcsname\relax
Einen noch besseren Test bietet scrbase mit \scr@ifundefinedorrelax.
BTW: Bei mir funktioniert ein schlichtes
\documentclass{article}
\usepackage[version=3]{mhchem}
\usepackage[normalem]{ulem}
\let\MakeRobust\undefined
\usepackage{fontspec}
% oder xltxtra laden
\begin{document}
\[ 2+2=5 \]
\end{document}
Dabei wird die \MakeRobust-Definition von fixltx2e verwendet.