This question and its answers might help (I didn't study it in detail). I was lucky in this question because OP didn't want to have index page numbers in index at all, but how to do that in case she would? Technically we typesetted small dictionaries of terms, not two independent indices.
There is a proposal to use the
flowfram package and my solution which uses two separate documents which are combined together later. This solution wouldn't work in case of clickable index page numbers. The hyperlinks would be gone if we used
\includepdf (that's a command from the
pdfpages package) or
\includegraphics (that's a command from the
I was thinking to save current position in the document (
\pdfsavepos from pdfTeX) of every index entry by wrapping the
\item command at a
xindy level. After that it would be possible to decide if to typeset index entry shifted to right or left side or even jump to some other location on the current page (it's just a theoretical situation when shifting and swapping 3+ columns), e.g. by using the
\makebox command. It would be possible but not effective.
I started to think about moving the columns as they are. When I used
\evensidemargin eventually, shifted by
\columnsep, it moved the left columns to the right position. Then I changed the
\columnsep dimension (right columns moved in front of the left columns) and I've got a solution with one remaining problem: we needed to fix header and footer which were also shifted. It could be done. I continued in my experiments and I used
\rightskip instead of
\oddsidemargin. I believe this is a solution but I haven't tested that in practice, yet. The two columns are swapped and if there were hyperlinks they would have worked.
I enclose an example and a preview of 5+5 pages: 5 pages with common two-column regime (the first row of pictures), the other 5 pages with swapped columns (the second row of pictures).
% run: *latex mal-columns.tex
\Huge\bfseries % For better reading...
Regular page in one-column regime...
%This is a common typesetting...
\advance\maltemp by 1
% Measuring dimensions...
% Working except the header+footer...
\advance\dimtemp by \columnsep
%\global\advance\oddsidemargin by \columnwidth
%\global\advance\oddsidemargin by \columnsep
% Columns reversed...
\advance\columnsep by -\oldcolumnsep
\advance\maltemp by 1
% Return to normal typesetting...
Let's get back to typesetting in one-column regime\ldots