Jag var tvungen att hantera ett liknande problem när jag beställde ett kategoriträd på ett onaturligt sätt. Om du infogar alla rader för ett id på en gång, kan du göra något så här för varje subId:
SET @seq = 0;
INSERT INTO test
(id, subId, text) VALUES
(_id, @seq := @seq + 1, 'Some text')
;
Om du behöver "lägga till" en rad till ett id kan du ställa in @seq med
SELECT IFNULL(MAX(subId), 0) INTO @seq FROM test WHERE id = _id;
Detta skulle naturligtvis kräva hantering av id av applikationen och inte mySQL.
Du kan göra samma sak som det sista kodblocket för att få nästa tillgängliga ID också.