If you can't afford to refactor this field as an integer right now but you need better performance or simplicity for aggregate calculations, you may want to consider a computed field:
ALTER TABLE timetable ADD DurationSeconds AS DATEDIFF(SECOND, '00:00:00', Duration);
You can then index this field if needed.
Based on a comment below, here's an alternative that seems to avoid conversion of the
00:00:00 argument (which I would've thought would be part of the compilation of the statement but I guess not!):
ALTER TABLE timetable ADD DurationSeconds AS DATEDIFF(SECOND, 0, Duration);
And here's a version that avoids DATEDIFF() entirely:
CAST(CAST('00:30:00' AS datetime) AS float) * 86400
My original answer used SUBSTRING() to directly convert the hours, minutes, and seconds to a total number of seconds. My testing found that DATEDIFF() was slower, but YMMV. Here's the alternate method:
ALTER TABLE timetable ADD DurationSeconds AS
3600 * CAST(LEFT(Duration, 2) AS int)
+ 60 * CAST(SUBSTRING(Duration, 4, 2) AS int)
+ CAST(RIGHT(Duration, 2) AS int);
Regardless which method you choose, you get a dynamically-calculated value that you can pass to AVERAGE(), SUM(), etc. as needed.