Un NULL es un no-dato, es un estado de indeterminación y por consecuencia no peude ser manipulado como información.
No existen los índices que puedan aceptar claves NULL, por la simple razónn de lo que te dije: un NULL es algo que no existe, y no se puede indexar las inexistencias...
Por otro lado, el mensaje de error que mencionas:
Cita: Cannot add or update a child row: a foreign key constraint fails
no es un error exactamente por una falla de índice. Es algo más grave: Una violación a la integridad referencial de la tabla, es decir que estás intentando ingresar en un campo un valor que no existe en la tabla a la que hace referencia.
SI el "indice" del que hablas, es una FK, puede apuntar a una clave de otra tabla que no sea PK, si esa clave es UNIQUE. En ese caso el campo que es FK podría ser NULL, pero si y sólo si en la tabla referida hay un único registro donde el campo indexado como UNIQUE es NULL.
¿Se entiende?
En esencia, tu problema es que estás diseñando MAL el sistema. Existen muchas alternativas para lograr lo que deseas, pero en todas ellas deberás respetar la integridad referencial cuando hay FK.
Tal vez haya como lograr lo que quieres, pero deberíamos entender completamente tu sistema apra proponerte una solución.