Anyway, here is what worked for me:
- add arch = x86_64 to /etc/zypp/zypp.conf
- zypper ref -f
- rpm -qa kernel*
- zypper in -f kernel-default kernel-default-base (the kernel packages found by the step above)
- mkinitrd
- reboot
- zypper in -f glibc
- zypper in -f rpm Attention: don't install, just resolve everything and get the list of -32bit packages that would get installed
- zypper in -f file-32bit libbz2-1-32bit... Install all the -32bit packages that were selected in the previous step
- zypper in -f rpm
- zypper dup --no-recommends --download-in-advance
- mkinitrd
- reboot
Whenever zypper asks you for conflict resolution (which will be every single case), select the option that involves "change architecture", never select "break ..." or "do not install ...". There should be no "uninstall..." proposal in the summary before confirming, only architecture changes and newly installed -32bit packgages.
There were some failing postinstalls for glib and other libraries, which could probably have been avoided by more carefully updating in intermediate steps, or by installing some -32bit library packages before the "dup" step, but the resulting system seems to work just fine.