Uma solução elegante é usar a ativação de soquete para iniciar o serviço do sistema, pois um dos pontos de ativação de soquete é permitir iniciar serviços que dependem um do outro sem precisar especificar suas dependências explicitamente (o que ser paralelizado ainda mais.)
Por exemplo, veja esta postagem do blog sobre a ativação do soquete , que torna esse ponto muito claro:
Socket activation makes it possible to start all four services completely simultaneously, without any kind of ordering. Since the creation of the listening sockets is moved outside of the daemons themselves we can start them all at the same time, and they are able to connect to each other's sockets right-away.
Embora seu caso específico seja o de uma dependência cruzada entre uma unidade de usuário e uma unidade de sistema, a mesma lógica se aplica.
Infelizmente, parece que o MariaDB atualmente não suporta a ativação do sistema nativamente . Mas você pode usar um proxy como systemd-socket-proxyd (8) para criar um serviço ativado por soquete proxies para o MariaDB em uma porta separada. Veja esta questão para mais detalhes.
Outra opção é executar o serviço Teamspeak como um serviço sistema em vez de um serviço de usuário e, em seguida, usar a diretiva User=
(como a que você comentou no momento) para executá-lo com o seu usuário do serviço.
Como você até o descreve como um "daemon", eu diria que fazer um serviço de sistema é totalmente apropriado e talvez até a abordagem mais correta aqui.
Existem desvantagens, como dificultar o gerenciamento (interromper / reiniciar) o serviço de alguém conectado como usuário "teamspeak", mas sugiro que as providências que envolvem a mudança para uma conta de serviço tenham desvantagens (pessoalmente Eu evitaria esse tipo de configuração) e você ainda pode manter essa configuração e permitir que o usuário gerencie o serviço do sistema usando "sudo" ou similar.