Моето предчувствие е, че с unsigned int и varchar 40 (особено varchar!) сега имате ОГРОМЕН първичен ключ и това прави вашия индексен файл твърде голям, за да се побере в каквато и RAM памет да имате за Innodb_buffer_pool. Това би накарало InnoDB да разчита на диск за размяна на индексни страници, докато търси и това е МНОГО търсения на диск и не много работа на процесора.
Едно нещо, което направих за подобен проблем, е да използвам нещо средно между наистина естествен ключ и сурогатен ключ. Ще вземем 2 полета, които всъщност са уникални (едно от които също беше varchar) и в слоя на приложението ще направим хеш с фиксирана ширина MD5 и ще използваме THAT като ключ. Да, това означава повече работа за приложението, но прави много по-малък индексен файл, тъй като вече не използвате поле с произволна дължина.
ИЛИ, можете просто да използвате сървър с тонове RAM и да видите дали това прави индекса да се побере в паметта, но аз винаги обичам да направя „хвърляне на хардуер в него“ в краен случай :)