Clear[ListKaratsuba, PolynomialKaratsuba]

    
ListKaratsuba[list1_, 
        list2_] := {list1[[1]]*list2[[1]]} /; Min[Length[list1], 
            Length[list2]] == 1

        
ListKaratsuba[list1_, list2_] := ListKaratsuba[list1, list2] = 
        Module[{a, b, c, d, n, m, list1neu, list2neu, amalc, bmald, 
            mittelterm, tab}, 
n = 
            Length[list1]; 
m = 
            Length[list2]; 
m = 
            Max[n, m]; 
n = 1; 
While[
            n < m, n = 2*n]; 
list1neu = 
            PadLeft[list1, n]; 
list2neu = 
            PadLeft[list2, n]; 
a = 
            Take[list1neu, n/2]; 
b = 
            Take[list1neu, -n/2]; 
c = 
            Take[list2neu, n/2]; 
d = 
            Take[list2neu, -n/2]; 
amalc = 
            ListKaratsuba[a, c]; 
bmald = 
            ListKaratsuba[b, d]; 
mittelterm = 
            amalc + bmald + 
              ListKaratsuba[a - b, d - c]; 
tab = 
            Table[0, {n/2}]; 
mittelterm = 
            Join[mittelterm, tab]; 
amalc = 
            Join[amalc, tab, tab]; 
amalc = 
            PadLeft[amalc, 2*n]; 
mittelterm = 
            PadLeft[mittelterm, 2*n]; 
bmald = 
            PadLeft[bmald, 2*n]; 
amalc + mittelterm + 
            bmald
]

    
PolynomialKaratsuba[pol1_, pol2_, x_] := 
      Module[{list1, list2, list3, l}, 
list1 = 
          Reverse[CoefficientList[pol1, x]]; 
list2 = 
          Reverse[CoefficientList[pol2, x]]; 
list3 = 
          ListKaratsuba[list1, list2]; 
l = 
          Length[list3]; 
Sum[
          list3[[l - k]]*x^k, {k, 0, 
            l - 1}]
]

PolynomialKaratsuba[3  (x^2) + 2  x - 1, 5  (x^3) + x + 2, x]

Expand[(3  (x^2) + 2  x - 1) (5  (x^3) + x + 2)]

pol1 = (∑_(k = 0)^100) Random[Integer, {1, 10}]*
            (x^k);
pol2 = (∑_(k = 0)^100) Random[Integer, {1, 10}]*
            (x^k);

Timing[prod1 = Expand[pol1*pol2];]

Timing[prod2 = PolynomialKaratsuba[pol1, pol2, x];]

prod2 - prod1