Accuracy reduces drastically when using TruncatedSVD with hashingvector
Some possible directions:


when you're unsure how your BoW model works check different n-gram ranges (did you even check how it works with only unigrams?)
TruncatedSVD by default only iterates 5 times (n_iter), so you could increase that
It's not at all surprising to get such drastic change of classification quality for such low dimensionality. Some questions you could ask are why 100 dimensions? Does TSVD work 1000 dimensions or something like that? What is the reconstruction error (how does TSVD's explained_variance_ratio_ look like)?
HashingVectorizer also has parameter that can control number of features, namely n_features.