there are a couple of things to try:
1) determine the optimal MTU value; this can be done by pinging the server using
ping -M do -s <size> server
on linux or using
ping -f -l <size> server
on Windows; vary <size> to find the optimal value; I'd start out with 1472 , as that is the default for ethernet networks.
If the MTU needs to be lowered then lower it on both ends
2) specify an 'mssfix' value e.g
mssfix 1400
3) add
tcp-nodelay
to the server config and restart the server.
If the connection is bad (i.e. packet loss > 10%) then openvpn over TCP will always be much slower than openvpn over UDP (due to the dreaded TCP-over-TCP handshake lockups).