Sem ofensa, mas você está pensando demais nisso.
Reúna suas informações, quando tiver tudo junto, crie uma transação e insira as novas linhas uma de cada vez. Não há impacto no desempenho aqui, pois a transação será de curta duração.
Um problema seria se você criasse a transação na conexão, inserisse a linha do usuário e esperasse que o usuário inserisse mais informações de perfil, insira isso, aguarde que ele adicione informações de endereço e insira isso, NÃO FAÇA ISSO , esta é uma transação desnecessariamente longa e criará problemas.
No entanto, seu cenário (onde você tem todos os dados) é um uso correto de uma transação, garante a integridade de seus dados e não sobrecarregará seu banco de dados e não criará - por si só - deadlocks.
Espero que isto ajude.
P.S. As desvantagens da abordagem Xml são a complexidade adicional, seu código precisa conhecer o esquema do xml, seu procedimento armazenado também precisa conhecer o esquema Xml. O procedimento armazenado tem a complexidade adicional de analisar o xml e inserir as linhas. Eu realmente não vejo a vantagem da complexidade extra para o que é uma transação simples de execução curta.