Eine Möglichkeit ist die Nutzung von TikZ:
    \documentclass{scrartcl}
    \usepackage{tikz}
    \newcommand\BG[2]{% Syntax: \BG{<hintergrundfarbe>}{<text>}
      \tikz[baseline=(n.base)]% vertikale Ausrichtung der Buchstabenbox
      \node[
      inner sep=0pt,outer sep=0pt,% kein zusätzlicher Platz in Buchstabenbox
      fill=#1,% Füllfarbe
      font=\strut% gleiche Höhe und Tiefe der Buchstabenboxen
      ](n){#2};%
    }
    \begin{document}
    Ein Testtext \par
    \BG{blue!30}{E}\BG{yellow}{i}\BG{blue!30}{n} Testtext\par
    \ttfamily
    Ein Testtext \par
    \BG{blue!30}{E}\BG{yellow}{i}\BG{blue!30}{n} Testtext
    \end{document}
![alt text][1]
Mit der Idee von @cis lässt sich das auch mit `\colorbox` lösen, wenn man `\fboxsep` lokal gleich Null setzt und mit `\strut` wieder für gleichhohe Boxen sorgt:
    \documentclass{scrartcl}
    \usepackage{xcolor}
    \newcommand\BG[2]{% Syntax: \BG{<hintergrundfarbe>}{<text>}
      {\setlength\fboxsep{0pt}\colorbox{#1}{#2\strut}}%
    }
    \begin{document}
    Ein Testtext \par
    \BG{blue!30}{E}\BG{yellow}{i}\BG{blue!30}{n} Testtext\par
    \ttfamily
    Ein Testtext \par
    \BG{blue!30}{E}\BG{yellow}{i}\BG{blue!30}{n} Testtext
    \end{document}
  [1]: http://texwelt.de/wissen/upfiles/buchstaben_1.png