Comparison between Aho-Corasick algorithm and Rabin-Karp algorithm
Asymptotic running time analysis is not likely to be the best tool to pick between these two algorithms: asymptotic analysis ignores constant factors, and the constant factors will be critical here.  The two algorithms have basically the same asymptotic running time, so asymptotic analysis probably isn't very helpful to choose between them.

Instead, the right way pick between the two algorithms is through experimental analysis.  Identify a representative workload, and then benchmark the performance of both algorithms on your workload, on the kinds of machines you intend to use in practice.



Incidentally, it sounds like you might have a slight confusion about the asymptotic running time of Rabin-Karp.  On the one hand you say that Rabin-Karp has $O(nm)$ running time, but then in the next sentence you say Rabin-Karp has $O(n+m)$ running time.  Perhaps you are confused by the difference between expected (average-case) vs worst-case running time.

Since Rabin-Karp is randomized, expected (average-case) running time is the appropriate metric to use to predict real-world performance in practice.  In particular, here the average is taken over the random choice of hash function.  It's specifically not an average taken over the choice of strings.  Even for the worst possible string and pattern, the average running time will still be $O(n+m)$.  With a suitable hash function, the probability that the running time is longer than $c\cdot(n+m)$ is exponentially small in $c$.  To put it another way (and being slightly informal), there's only an exponentially small chance that Rabin-Karp takes longer than $O(n+m)$ time.  We already have to accept exponentially small chances of bad things happen -- for instance, there's a tiny but non-zero chance of a cosmic ray causing a bit-flip in your memory that causes the program to loop forever.  So, worrying about this exponentially small chance makes no sense.

From an engineering point of view, Rabin-Karp's running time is $O(n+m)$ [or it might as well be].  Ignore the $O(nm)$ stuff; that's not really relevant to practice.