PA or not, this is somewhat getting back to the original question: how can we get a reliable index assignment on startup with several soundcards.

I'm not using PA, but mostly because I noticed that it uses (much) more CPU with many desktop applications, due to resampling I was told.
I have an internal HDA, an nvidia graphics chip, a nanokontrol and a UA-25.
The latter both use snd-usb, though one obviously cannot produce sound.
The nvidia chip seems to expose an audio device (?) handled by a snd-hda-intel module, as does the snd-hda-intel soundchip. Although the first one cannot produce sound.
So I would like the following order to be maintained to have desktop applications adress a working soundcard and to have the UA-25 always at the same index for JACK.

 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xfbff8000 irq 32
 1 [NVidia         ]: HDA-Intel - HDA NVidia
                      HDA NVidia at 0xfde7c000 irq 16
 2 [UA25           ]: USB-Audio - UA-25
                      EDIROL UA-25 at usb-0000:00:1d.0-1, full speed
 3 [nanoKONTROL    ]: USB-Audio - nanoKONTROL
                      KORG INC. nanoKONTROL at usb-0000:00:1d.0-2, full speed

The way I found after some trials with module inits was:
1) in /etc/modprobe.conf:
options snd-hda-intel index=0
options snd-usb-audio index=2

This fortunately always puts the UA-25 at index 2. However, the first option does not work, since the nanokontrol seems to get recognized before the HDA device and it is often sitting on index 0.
So I found that adding
snd_hda_intel
to /etc/modprobe.preload does the job, this way the intel module appears before the usb module...

Now my question is: is there any better way to do this? Is there a way to distinguish further than only by the module name for the index? How could this be solved more generally?

I guess PulseAudio has the goal to handle such issues, and once it gets there without side effects, this seems an important goal. But if I understand right, it does it by id attribution in a layer on top of this. If it's only that index shuffling, why can't alsa or the kernel be more predictable? BTW when I tried PA here together with JACK, the device reservation worked very well.

Frank