Just so you know, I am the current maintainer of DBD::ODBC. The optional feature not implemented error can occur for multiple reasons and although you think it happens when calling bind_param, in actual fact, bind_param ends up as multiple ODBC API calls. The first thing to do would be to work out where in those calls it failed. Since you have a recent DBI and DBD::ODBC you can do
and we can look at the last few hundred lines of the log to see what really is happening. If we need to go deeper you can enable ODBC tracing from your ODBC Administrator but I wouldn't right now.
However, having said all that, it is generally unwise to tell DBD::ODBC how to bind input parameters especially when using columns like bigints and date/time/timestamps. The reality of it is, that SQL Server knows what the types of the columns are, it can usually (although not always) describe them via SQLDescribeParam and it can convert them internally and in Perl all your data is string data anyway.
Also read Why am I getting errors with bound parameters?