Given two non-negative integers represented as decimal strings, return their product as a decimal string without using built-in big-integer or arbitrary-precision libraries. Handle inputs like "0" and leading zeros correctly, and ensure the algorithm works efficiently for strings up to a few thousand digits. Explain the time and space complexity and outline how you would test edge cases.