I would define two commands (actually one command with a *-form):
\newcommand\toindex{\@ifstar{\@dblarg{\@toindexs}}{\@toindex}}
\def\@toindexs[#1]#2{\indexlayout{#2}\index{#1@#2}}
\newcommand\@toindex[2][]{%
\if\relax\detokenize{#1}\relax
\indexlayout{#2}%
\begingroup
\@splitword#2\@nil%
\uppercase\expandafter{%
\expandafter\def\expandafter\@initial\expandafter{\@first}}%
\toks0=\expandafter{\@initial}%
\toks2=\expandafter{\@rest}%
\edef\x{\endgroup\noexpand\index{\the\toks0 \the\toks2 }}\x
\else
\indexlayout{#2}\index{#1}
\fi
}
\def\@splitword#1#2\@nil{\def\@first{#1}\def\@rest{#2}}
\makeatletter
For entries such as $n$-entry you would use \toindex*[nentry]{$n$-entry}, for word you can use \toindex{word}. The optional argument can be used in either case.
For \toindex* the optional argument is used for collation; it's actually more than optional: makeindex would sort \index{$n$-entry} among symbols.
For \toindex the optional argument can be used for the cases when the word to be indexed is special, for instance
\toindex[equipe@\'Equipe]{\'equipe}
However, I don't see the necessity to capitalize words in the index. Look at the TeXbook, for an example. :)