Does this suit you?
\documentclass[12pt]{article}
\usepackage{amsthm}
\usepackage{mathtools, nccmath}
\usepackage{eqparbox}
\newcommand{\eqmathboxr}[2][Mr]{\eqmakebox[#1][r]{$\displaystyle#2$}}
\newcommand{\eqmathboxl}[2][Ml]{\eqmakebox[#1][l]{$\displaystyle#2$}}
\begin{document}
\begin{align}
\max_{p_1} \pi_R &=(p_1-c_1)(a_1-b_1p_1) \notag \
\eqmathboxr{\max_{p_2,x_1} \pi_C} &=\eqmathboxl{(p_2-c_2)(a_2-b_2p_2)-x_1r_1} \notag \
\eqmakebox[Mr][l]{s. t.}\notag \
\eqmathboxr{(a_1-b_1p_1)}&<(a_2-b_2p_2)
\end{align}
\vspace{-6ex}
\begin{subequations}
\begin{align}
\eqmathboxr{p_1} & \le \eqmathboxl{p_2} \llap{(when $ a_1\le a_2 $)}\
x_1r_1 & \le \eqmathboxl{p_2 } \llap{(when $ a_2 < a_1 $)}
\end{align}
\end{subequations}
\vspace*{-3ex}
\begin{equation}
\begin{aligned}
\eqmathboxr{c_1}&<\eqmathboxl{c_2}\
b_1&=b_2
\end{aligned}
\end{equation}
\end{document}

Explanations:
The general idea is to use three independent align environments, since it's not possible to a subequations environment for only some rows of an align environment, and make the alignment points of these environments the same thanks to the eqparbox package: I defined \eqmathboxr and \eqmathboxl commands, which just \eqmathbox commands defined by the package, with their content in math mode, display style, and flushright or flushleft respectively. These commands/boxes use tags (with default values) so that all boxes sharing the same tag have width equal to the widest content. I finally apply these commands to the most relevant left sides or right sides of the whole bunch of equations.