Here's a way using \tags for the subequations.
The amsmath package provides \tag{<stuff>} which prints (<stuff>) as the equation label. Additionally, it does not increment the equation counter, since it is not needed.
This behaviour is exploited in the following MWE which provides \subeqn as a "tag" for each subequation, and it should be used with each subequation. The printed tag is an updated equation number, with the subequation number appended. Referencing works as expected, since the tag is referenced in its entirety, just like with regular labelling/referencing.
The advantage with this approach is that alignment is kept since there is no switch of environments. Marginal clutter within the align environment's "subequation area" may be the only drawback.

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\AtBeginEnvironment{align}{\setcounter{subeqn}{0}}% Reset subequation number at start of align
\newcounter{subeqn} \renewcommand{\thesubeqn}{\theequation\alph{subeqn}}%
\newcommand{\subeqn}{%
\refstepcounter{subeqn}% Step subequation number
\tag{\thesubeqn}% Label equation
}
\begin{document}
\begin{align}
A + B &\to C + D \\
E + F &\to G + H \label{eq:EFGH} \\
I + J &\to K + L \refstepcounter{equation}\subeqn \\
&\to M + N \subeqn \label{eq:MN}\\
&\to O + P \subeqn
\end{align}
The EFGH equation is \eqref{eq:EFGH} and the MN is equation~\eqref{eq:MN}.
\end{document}
The etoolbox package was used to reset the subequation counter at the start of every align environment, for consistency. Otherwise subequation numbers would resume if used in subsequent align environments.
If you need to avoid using the etoolbox package, then you could use the following preamble:
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\newcounter{subeqn} \renewcommand{\thesubeqn}{\theequation\alph{subeqn}}%
\makeatletter
\@addtoreset{subeqn}{equation}
\makeatother
\newcommand{\subeqn}{%
\refstepcounter{subeqn}% Step subequation number
\tag{\thesubeqn}% Label equation
}
This resets the subeqn counter with every increment of the equation counter. Note that in both instances, a \refstepcounter{equation} is required in order to obtain the correct equation number for the subequations.
align, and that the structure should just be array-like, since LaTeX has anarrayenvironment. – Werner Nov 12 '11 at 08:57