I've deleted my previous suggestion about using keepConditions as it didn't work in your use case (I tested) but it got me thinking and I've come up with this:
$('#example tfoot th').each(function(k, v){
var title = $(this).text();
$(this).html('<input type="text" data-position="'+k+'" placeholder="Search ' + title + '" />');
});
var example = $("#example").DataTable();
example.columns().every(function(){
var that = this;
$('input', this.footer()).on('keyup change', function(){
var hash = [];
$('#example tfoot th').each(function(k, v){
if(~~$(v).find("input").val().length){
hash.push($(v).find("input").data("position") + "=" + encodeURIComponent($(v).find("input").val()));
}
});
window.location.hash = hash.join("&");
if(that.search() !== this.value){
that.search(this.value).draw();
}
});
});
if(window.location.hash) {
var hash = window.location.hash.substring(1).split("&");
$.each(hash, function(k, v){
$("#example tfoot th input:eq("+v.split("=")[0]+")").val(decodeURIComponent(v.split("=")[1])).trigger("change");
});
}
Basically each time a search term is entered we iterate over all the inputs and update the url hash with the results, then we make sure we listen to see if there is a hash and do the reverse. This is a working example.
Hope that helps.