Why is it not based on the serial number of the USB device?
O número de série de um dispositivo não é garantido. Para conectar um dispositivo USB a um dispositivo host USB, ele deve indicar o id do hardware (entre outros campos) para um host USB, caso contrário, ele não poderá se conectar a esse dispositivo. Existem certos campos que podem ser transmitidos que são opcionais. O número de série do dispositivo não precisa ser transmitido.
To my mind it would be safer since two USB devices can have the same hardware id...
Nada impediria que dois dispositivos USB tivessem o mesmo número de série. Um dispositivo USB informa ao host USB tudo sobre ele. Na maioria dos casos, um dispositivo malicioso seria programado dessa forma, por isso seria identificado como um dispositivo inofensivo ou simplesmente como um dispositivo pode ser conectado à máquina.
Is there a way to create a whitelist that's based on the serial numbers?
Não; Você está limitado a usar os IDs de hardware e os IDs compatíveis.