|   | 1 |  initial version  | 
In the output of your initial question, the unknown x2 has not been isolated, since it appears in both sides. You can formulate step2 in a more friendly way:
step2 = solve((p1/p2).subs(step1)==p1/p2, x1)
Likewise, borrowing an idea from this solution of another question, you can rewrite step3:
step3 = solve((U/R).subs(step2).log().log_expand()==0, x2)
step3
The output is
[x2 == e^(-a*log(a)/(a + b) + a*log(b)/(a + b) + a*log(p1)/(a + b) - a*log(p2)/(a + b) + log(R)/(a + b))]
Let see x2 in a more mathematical notation:
show(x2.subs(step3).canonicalize_radical())
This yields $$ \frac{R^{\left(\frac{1}{a + b}\right)} b^{\frac{a}{a + b}} p_{1}^{\frac{a}{a + b}}}{a^{\frac{a}{a + b}} p_{2}^{\frac{a}{a + b}}} $$
 Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.
 
                
                Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.