Why do solar cells have very low efficiency?
The answer is pretty straight forward.  Si has a bandgap of 1.12eV which translates into photons of approx.. 1.1 um wavelength.  For photons energy is \$ E = \frac{hc}{\lambda} \$ with h = planck's constant, C = speed of light and \$ {\lambda} \$= wavelength.

The sun's spectrum at the earths surface spans from 2u down to 400 nm, with the 400 nm photons having much more energy.  When the photon hits the Si substrate it generates current. If a photon has sufficient energy to create free electrons in the Si then current will flow.  In the case of Si you need wavelengths shorter than ~ 1.1u.  If the photon carries extra energy (i.e. is shorter wavelength) that energy is not converted into additional electrons or electron energy.  It simply goes into heat as you can only generate one electron (at best) per photon. 

Higher efficiency PV cell's use stacks of material with differing bandgap energies to harvest the different wavelengths.

Recent advances in efficiency have been focused on getting the light into the substarte through AR coatings and minimization of blocking layers.