Some common estimation techniques can help.
Having historical data can help. For each test case, measure the time it takes to complete. Given a large enough body of test cases, you can determine how long it takes to run a test case. You may be able to extrapolate how long it takes to run an average test step, as well. However, the time it takes to run a test case or a test step depends on the complexity of the case (or the step) and the experience of the tester running the particular case.
If multiple testers are gathering the data, you can expand this to look at organizational averages for test cases and steps.
Comparing test cases that are similar in complexity can also be helpful, regardless of the number of steps. Experts - people who are well-versed in testing different parts of the system - can be useful in creating these comparisons. Estimating in groups instead of individually can further enhance the estimate quality, and having historical data can also be helpful.
As far as preparation of test cases go, having clear requirements and comparing the complexity of testing similar requirements coupled with expert insights can be helpful. Creating test cases is far more of a creative endeavor than executing test cases, so it can be more difficult to estimate since there are more variables. Having more historical data, more experience, and more expert insights can help reduce the uncertainty.