% と & を索引に載せる,という意味では,yoshi hiro さんのご回答で完全に解決するはずで,@ より後ろの〈索引項目〉を適切にエスケープ等すれば索引に表示されるはずです(一方で @ 前の〈読み方〉部分はエスケープ不要です).
ただし,LaTeX ではなく mendex において特別な役割をもつ文字 (@, !, |, etc.) の場合は,出現位置を問わずバックスラッシュ (\) ではなくダブルクオート (") でエスケープする必要があるので注意してください(詳細は texdoc mendex 等を参照).
ところで,元質問文の
> (当然)表示されず、
の「(当然)」がちょっと気になってしまったので,蛇足的な回答をしてみます.
実は \index 命令の引数内での LaTeX で特別な役割をもつ文字(\, %, &, etc.)の扱いはかなり特殊で,平たく言えば「ほとんどの文字の特殊な能力は無効化」されています.そのため,以下のソースは “合法” です:
%%%%% test1.tex ここから %%%%%
\documentclass{jsarticle}
\usepackage{makeidx}
\makeindex % test1.idx に索引項目を収集
\begin{document}
テスト
\index{きごう%@記号%}
\index{きごう&@記号&}
%\printindex % 実際の索引は表示しない
\end{document}
%%%%% test1.tex ここまで %%%%%
実際に,上のファイルは LaTeX でエラーなく処理され,test1.idx に
%%%%% test1.idx ここから %%%%%
\indexentry{きごう%@記号%}{1}
\indexentry{きごう&@記号&}{1}
%%%%% test1.idx ここまで %%%%%
と記載されます.この test1.idx は mendex でも正常に処理できて
%%%%% test1.ind ここから %%%%%
\begin{theindex}
\item 記号%, 1
\item 記号&, 1
\end{theindex}
%%%%% test1.ind ここまで %%%%%
となります.
しかし,先の元ソース test1.tex で \printindex のコメントアウトを解除すると,その位置で test1.ind が(存在すれば)読み込まれるわけですが,ここで初めて % や & の特殊効果が発揮されて,エラーにつながります.
したがって,きちんと狙い通りの索引を表示させるためには
%%%%% test2.tex ここから %%%%%
\documentclass{jsarticle}
\usepackage{makeidx}
\makeindex % test2.idx に索引項目を収集
\begin{document}
テスト
\index{きごう%@記号\%}
\index{きごう&@記号\&}
\printindex % 実際の索引を表示
\end{document}
%%%%% test2tex ここまで %%%%%
のように @ 以下の部分はバックスラッシュ (\) でエスケープするなどの工夫が必要になります.
ちなみにですが,上記の説明を理解すると @ 前の〈読み方〉部分でエスケープ不要な理由も明らかになったかと思います.