Miałem do czynienia z podobnym problemem nienaturalnego porządkowania drzewa kategorii. Jeśli wstawiasz wszystkie wiersze dla jednego identyfikatora naraz, możesz zrobić coś takiego dla każdego subId:
SET @seq = 0;
INSERT INTO test
(id, subId, text) VALUES
(_id, @seq := @seq + 1, 'Some text')
;
Jeśli chcesz "dodać" wiersz do identyfikatora, możesz ustawić @seq za pomocą
SELECT IFNULL(MAX(subId), 0) INTO @seq FROM test WHERE id = _id;
To oczywiście wymagałoby zarządzania identyfikatorem przez aplikację, a nie przez mySQL.
Możesz zrobić to samo, co ostatni blok kodu, aby uzyskać również następny dostępny identyfikator.