udev is the way, IMO. At least on the Pi that I have a lot of experience with.
The rules are a pain in the rear. Probably because I don't fully understand how it works, so it is a process of trial and error. But udev is the only way I've gotten consistent control of device naming for projects. The key is to find enough distinct attributes to match on, that are at the same "level". There are lots of USB device properties, but a single udev rules must match properties all at the same level. -- John.