O TCP não pode "tolerar" 50% de perda de pacotes. Ele simplesmente trará uma parada, por uma razão simples: adapta sua velocidade de transmissão com base na perda de pacotes. Quando os pacotes são perdidos, entende-se que indicam congestionamento. Se você eliminar 50% dos pacotes (digamos, com uma regra aleatória de firewall de descarte) independentemente do tráfego, haverá uma disponibilidade cada vez menor da largura de banda.
Além disso, duvido que os ISPs moldem o ICMP vs o TCP. Alguns podem fazer, pois existem pessoas realmente estúpidas por aí, mas não faz muito sentido fazê-lo. A maioria moldará toda a conexão ou "se moldará" devido ao congestionamento. Em ambos os casos, os pacotes geralmente são descartados aleatoriamente.
Dito isto, você pode executar ping com o TCP, mas existem várias advertências. O primeiro é apenas enviar o pacote inicial em uma conexão TCP, o que provocará uma resposta de um servidor com uma porta aberta, mas será visto como uma tentativa de conexão. Idealmente, você poderia usar o serviço "eco" (porta TCP 7) ... mas na verdade não pode, porque agora está desativado por padrão em qualquer lugar. De qualquer forma, se você conseguir alguém para habilitá-lo na máquina que deseja testar, um programa poderá usá-lo para verificar o tempo de recuperação de pacotes dentro de uma conexão TCP.
Dito isto, você provavelmente tem o comando "tracepath" instalado em sua máquina; é semelhante ao traceroute, mas não usa TCP ou ICMP, mas UDP. Para o TCP, existem vários utilitários por aí, você pode tentar hping .