Again, I don't really use Haskell, but I would supsect that this segment is dominating the time of execution:
makePalindrome :: String -> String -> String -> String
makePalindrome l c r = show ((read (l ++ c ++ r)) + (sum (differences (reverse l) r)))
where differences   = 
differences (x:xs) (y:ys) = (ord x - ord y)*10^(length ys):(differences xs ys)
With the number having up to 1000000 digits this should be pretty slow.
The correct algorithm here will have O(number of digits) complexity. Your algorithm is that but along with the complexity of doing bignum mathematics which would not scale well.